当指针类型作为参数传递给模板参数 T 时,如何声明指向 const 类型的指针? const T 和 T 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/