C ++ отличает структурно идентичные классы - PullRequest
1 голос
/ 20 октября 2011

У меня есть несколько типов, которые имеют общее поведение и с теми же конструкторами и операторами.Некоторые выглядят так:

class NumberOfFingers
{
public:
    void operator=(int t) { this->value = t; }
    operator int() const { return this->value; }
private:
    int value;
};

NumberOfToes идентично.

У каждого класса свое поведение, вот пример:

std::ostream& operator<<(std::ostream &s, const NumberOfFingers &fingers)
{
    s << fingers << " fingers\n";
}

std::ostream& operator<<(std::ostream &s, const NumberOfFingers &toes)
{
    s << toes << " toes\n";
}

Как я могу свернутьдублирование в определениях классов при сохранении различных типов классов?Я не хочу, чтобы NumberOfFingers и NumberOfToes были производными от общего базового класса, потому что я теряю конструктор и операторы.Я предполагаю, что хороший ответ будет включать шаблоны.

1 Ответ

5 голосов
/ 20 октября 2011

Да, вы правы в том, что это будет включать шаблоны:)

enum {FINGERS, TOES...};
...
template<unsigned Type> //maybe template<enum Type> but I havent compiled this.
class NumberOfType
{
public:
    void operator=(int t) { this->value = t; }
    operator int() const { return this->value; }
private:
    int value;
};
...
typedef NumberOfType<FINGERS> NumberOfFinger
typedef NumberOfType<TOES> NumberOfToes
... so on and so forth.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...