当我用 char *
手动替换 T
时,以下示例可以正常工作,但为什么不能正常工作:
template <typename T>
class A{
public:
A(const T _t) { }
};
int main(){
const char * c = "asdf";
A<char *> a(c);
}
使用 gcc 编译时,出现以下错误:
test.cpp: In function 'int main()':
test.cpp:10: error: invalid conversion from 'const char*' to 'char*'
test.cpp:10: error: initializing argument 1 of 'A<T>::A(T) [with T = char*]'
最佳答案
用 char*
替换 T
得到一个指向 char 的 const
指针,而 c
被声明为一个指针到 const char
。
一个解决方案是通过值获取指针和整数类型,通过常量引用获取类类型。如果可以,请使用 Boost Call Traits为您解决这些问题。
关于C++:将 const 与模板参数组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822965/