我发生了以下模式,并想知道它是否有名称?
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();
答案 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 <>
识别,而不是部分特化。