将const添加到指针类型

假设我有一个类模板:

template <class T>
struct A
{
  T value;

  void foo(auto fun) { 
    fun(value);
    // ^^^^^^^ Pass value as a const object
  }
};

我想常量添加到value,打电话时fun 这样只有接受功能 TT 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.


以上是将const添加到指针类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>