我很好奇是否可以有一个同时具有模板和非模板形式的类。就像是:
SomeClass foo;
SomeClass<int> bar;
foo.do_something();
bar.do_something(5);
我可以多次定义所有内容,但我不知道是否可以使用相同的类名。
简短的回答:不,这是不允许的。您的编译器给您的确切错误消息会有所不同,但您应该会收到一条错误消息。
但是,您可以为模板提供默认参数,因此您可以仅使用 实例化它<>
,例如:
template <class T=int>
class X {};
int main(){
X<long> a;
X<> b; // used default, so equivalent to "X<int> b;"
}
通过使用默认模板参数,您可以得到一些接近的东西:
template <class T = char>
class SomeClass{};
SomeClass<> foo; // char type
SomeClass<int> bar; // int type
如果您希望默认类型的成员函数具有不同的行为,请使用特化。