带有模板和非模板形式的C ++类

时间:2013-04-22 03:41:44

标签: c++ class templates

我很好奇是否可以使用模板化和非模板化形式的类。类似的东西:

SomeClass foo;
SomeClass<int> bar;

foo.do_something();
bar.do_something(5);

我很好地定义了所有内容,但我不知道是否可以使用相同的类名。

2 个答案:

答案 0 :(得分:3)

简短的回答:不,这是不允许的。编译器给出的确切错误消息会有所不同,但您应该收到错误消息。

但是,您可以为模板提供默认参数,因此您只能使用<>对其进行实例化,例如:

template <class T=int>
class X {};

int main(){ 
    X<long> a;
    X<>     b; // used default, so equivalent to "X<int> b;"
}

答案 1 :(得分:1)

您可以使用默认模板参数来获取某些内容:

template <class T = char>
class SomeClass{};

SomeClass<> foo;     // char type
SomeClass<int> bar;  // int type

如果您希望默认类型的成员函数具有不同的行为,请使用特殊化。