鉴于以下简单(和愚蠢:))类模板:
template<typename T>
class Temp {
int _a;
int _b;
int _c;
public:
template<typename F>
Temp(F a, F b, F c) : _a(a), _b(b), _c(c) {}
template<>
Temp(const string& a, const string& b, const string& c) : _a(1), _b(2), _c(3) {}
};
有一个主要的 ctor 和一个用于字符串的 ctor 专门化。我知道这门课没有任何意义,但这不是重点。
当我尝试这样做时:
Temp<int> t1("a", "b", "c");
它不会让我。
但如果我改变:
Temp(const string& a, const string& b, const string& c) : _a(1), _b(2), _c(3) {}
至:
Temp(const char* a, const char* b, const char* c) : _a1(),_b(2),_c(3) {}
它确实让我这样做。
编译器不应该接受字符串对象的字符串文字吗?我的意思是,他们确实(我想)定义了一个接受 const char *.. 的 ctor,因为像:
void foo(const string& s) {}
和
foo("Hey there");
工作,我猜它与模板参数有关。
希望得到澄清。