template<typename C>
class String{
public:
String();
...
private:
int sz;
C* ptr;
};
在第679页,作者写道:
Members of a template class are themselves templates parameterized by the parameters of their template class. When such a member is defined outside its class, it must explicitly be declared as template. For example:
template<typename C> String<C>::String() :sz(0), ptr(ch) { ch[0] = {}; }
这个例子中有一个明显的错误。变量ch
在上面没有任何意义。但这与我的问题无关。我想知道的是,为什么上面的构造函数不能不带参数C
来定义,如下所示?
template<typename C>
String::String()
: sz(0), ptr(nullptr)
{
}
my_temp<C>
时,你是在引用一个特化。任何特化都可以被引用,并且也确实被引用了它的模板标识([temp.names]/1) - StoryTeller - Unslander Monicatemplate <>
引入”。我在我的问题和你的回答中没有看到任何template <>
,你可以解释一下吗? - WaldB