我正在学习/学习模板功能专业化规则。我开始使用此功能模板专业化帮助
template<typename T>
std::string toString(const T& t)
{
ostringstream out;
out << t;
return out.str();
}
现在,我想专门它为const char *
typedef const char* ccharPtr;
template<>
std::string toString(const ccharPtr& s)
{
cout << "in specialization" << endl; // just to let me know
return std::string(s);
}
我想要做的,没有一个typedef,但到目前为止,我想不通出来。
该特化适用于const char *,但不适用于char *。
const char* s1 = "Hi"
cout << toString(s1); // works
char s2[] = "There";
cout << toString(s2); // doesn't work, since s2 isn't const char*
cout << toString(", Bob"); // doesn't work. Why not?
我想单个专业化为每个案件工作,但无法解决它。
是的,它会工作取代
strcpy
,但我想学习模板特殊化。我知道这是一种人为的情况。 – John所以我想你可能不得不专门为const char *和char *一次。由于char *不是const char *,我猜C++不符合专业化,并使用更通用的功能。如果你想让const char *和char *都使用相同的特化,我想你必须明确地将你的参数从char *转换为const char *。 – neodelphi
@John:你应该学习模板专业化的第一件事情之一是函数模板专业化很少有帮助。 – aschepler