我不明白为什么这不起作用:
template <typename T>
struct TypeWrapper
{
typedef T type;
};
template <>
struct TypeWrapper<char*>
{
typedef std::string type;
};
template <>
struct TypeWrapper<const char*>
{
typedef std::string type;
};
template <int N>
struct TypeWrapper<char[N]>
{
typedef std::string type;
};
template <int N>
struct TypeWrapper<const char[N]>
{
typedef std::string type;
};
class A
{
public:
template< typename T >
A( const typename TypeWrapper<T>::type& t )
{
// do smthing
std::cout << t << std::endl;
}
};
int main( void )
{
A a( 42 );
return 0;
}
我使用 Visual Studio 2010 进行编译,但出现以下错误:
error C2664: 'A::A(const A &)' : cannot convert parameter 1 from 'int' to 'const A &'
如果我将 A 的构造函数更改为此它可以工作:
A( const T& t )
但我想将 char* 类型处理为 std::strings 和可能的其他类型调整,而不复制构造函数(定义特定于每种类型的构造函数,这有效)