枚举类

时间:2010-10-22 13:03:42

标签: c++ templates

我发生了以下模式,并想知道它是否有名称?

enum定义具体类:

enum Fruits{ eApple, eBanana };

模板struct提供界面:

template< Fruit T >
struct SomeFruit {
    void eatIt() { // assert failure };
};

然后我们可以实现具体的类:

template<>
struct SomeFruit< eApple > {
    void eatIt() { // eat an apple };
};

template<>
struct SomeFruit< eBanana > {
    void eatIt() { // eat a banana };
};

然后使用它们:

SomeFruit< eApple> apple;
apple.eatIt();

3 个答案:

答案 0 :(得分:3)

通常像这样使用(在编译时捕获错误)

template< Fruit T >
struct SomeFruit;

template<>
struct SomeFruit< eApple > {
    void eatIt() { // eat an apple };
};

template<>
struct SomeFruit< eBanana > {
    void eatIt() { // eat a banana };
};

通常称为 编译时多态 (与运行时多态相反,在C ++中使用虚函数实现)。

答案 1 :(得分:1)

我不知道这个名字,但你最好不要实现模板 - 只是声明如果有人试图实例化它会抛出编译错误:

template< Fruit T >
struct SomeFruit;

答案 2 :(得分:0)

这称为模板专业化。在这种情况下,它是显式(也称为完全)特化,由template <>识别,而不是部分特化。