Перечисленные классы - PullRequest
       1

Перечисленные классы

3 голосов
/ 22 октября 2010

Я столкнулся со следующей схемой и удивился, есть ли для нее имя?

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 ]

3 голосов
/ 22 октября 2010

Это обычно используется так (чтобы отлавливать ошибки во время компиляции)

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 голос
/ 22 октября 2010

Я не знаю имени, но вам лучше не внедрять шаблон - просто объявив, что он выдаст ошибку компиляции, если кто-то попытается создать экземпляр:

template< Fruit T >
struct SomeFruit;
0 голосов
/ 22 октября 2010

Это называется специализация шаблона. В этом случае это явная (или полная) специализация, которая распознается template <>, в отличие от частичной специализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...