c++ - 指针作为模板参数 - 如何在模板内声明指向 const 的指针

标签 c++ templates

当指针类型作为参数传递给模板参数 T 时,如何声明指向 const 类型的指针? const TT const 都成为指向类型的 const 指针,而我需要声明指向 const 类型的指针 .

template<typename ValueType>
class TestClass {
public:
    void TestMethod(const ValueType x) {
        // When ValueType is int*,
        // type of x is int * const;
        // how do I declare x such that it is const int* ?
        std::cout<<x;
    }
};

最佳答案

您可以创建一个可以做到这一点的特征。

template <typename T>
struct add_inner_const { using type = const T; };

template <typename T>
struct add_inner_const<T*> { using type = const T*; };

template <typename T>
using add_inner_const_t = typename add_inner_const<T>::type;

template<typename ValueType>
class TestClass {
public:
    void TestMethod(add_inner_const_t<ValueType> x) {
        // When ValueType is int*, x is const int*
        std::cout<<x;
    }
};

这会将 int ** 转换为 int * const *,如果您希望将其转换为 const int **,那么您需要不同的专业

template <typename T>
struct add_inner_const<T*> { using type = add_inner_const_t<T>*; };

关于c++ - 指针作为模板参数 - 如何在模板内声明指向 const 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67967424/

相关文章:

c++ - 如何使用c++和QT显示带有动态数据的网页

c# - 转换 C++ 中的 std::string,使其成为 C# 中的 byte[]

c++ - c++ 中的 stdexcept 与异常 header

c++ - 模板 - 练习

c++ - std::mt19937 为相同的第一个 float ex(1.2, 1.5) 给出相同的随机 float

C++: Operator= 多态性重载

jquery - 如何将多个模板之一的 Meteor 助手设置为 true?

c++ - 无法推导具有嵌套类型的模板函数

c++ - 类成员 STL 容器 (const std::array) 的编译时创建,其中填充了元素

c++ - 两种模板代码模式之间的差异,一种情况下分配了数字,而另一种情况下使用关键字 typename