【发布时间】:2021-10-18 09:10:23
【问题描述】:
假设我有一个类模板:
template <class T>
struct A
{
T value;
void foo(auto fun) {
fun(value);
// ^^^^^^^ Pass value as a const object
}
};
我想在调用fun 时将 const 添加到value 以便只有接受 T、T const&、T const* 的函数是可调用的。我最初的方法是让foo 成为一个 const 成员函数,但这对于引用和指针成员来说是失败的,因为 const 成员函数可以修改它们(你只是不能对这些成员进行变基)。
我还尝试使用std::add_const 和std::as_const 将值传递给参数函数(fun),但这会产生如下转换:
T = MyData* // say T is the type "Pointer to MyData"
add_const<T> = MyData *const // constness is added to the pointer,
// i.e. it becomes constant pointer to MyData
在上面的例子中我想要的目标类型是MyData const*(指向常量MyData的指针)。
- 是否有实现此目的的标准工具?
- 除了装饰电话
fun(value),还有其他方法吗?
【问题讨论】:
标签: c++ templates constants typetraits const-correctness