将const添加到指针类型
假设我有一个类模板:
template <class T>
struct A
{
T value;
void foo(auto fun) {
fun(value);
// ^^^^^^^ Pass value as a const object
}
};
我想常量添加到value,打电话时fun 这样只有接受功能 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*(指向 constant 的指针MyData)。
- 是否有标准设施来实现这一目标?
- 有没有其他方法可以做到这一点,我的意思是除了装饰电话之外
fun(value)?
演示
回答
你可以
fun(static_cast<std::conditional_t<
std::is_pointer_v<T>,
std::add_pointer_t<std::add_const_t<std::remove_pointer_t<T>>>,
std::add_const_t<T>
>
>(value));
那么当T是时MyData*,转换后的类型将是MyData const*; 对于非指针类型,如MyData转换后的类型将是MyData const.