Скажите, если я хочу расширить функциональность ряда объектов, которые я не могу изменить - например, для добавления форматирования, и не хочу извлекать огромное количество классов для расширения функциональности - будет ли следующее плохо? (Я использую int и float в качестве примера, но в моей программе у меня есть около 20 или 30 классов, которые в конечном итоге окажутся в дереве, которое будет содержать универсальный тип).
class ITreeNode
{
public:
virtual ~ITreeNode() {}
virtual void print() = 0;
};
template <class T>
class ObjectNode : public virtual ITreeNode
{
public:
virtual ~ObjectNode() {}
ObjectNode(T v)
{
m_var = v;
}
void print()
{
print(m_var);
}
protected:
void print(int i)
{
printf("int (%d)\r\n", m_var);
}
void print(float f)
{
printf("float (%f)\r\n", m_var);
}
T m_var;
};
int _tmain(int argc, _TCHAR* argv[])
{
ObjectNode<int> tInt(5);
ObjectNode<float> tFloat(5.5);
tInt.print();
tFloat.print();
getchar();
return 0;
}
По сути, мне нужно дерево объектов (одного и того же базового типа), которое я могу вызвать с помощью этих расширенных функций. Первоначально я использовал шаблон посетителя и создавал класс посетителя для каждой расширенной функциональности, в которой я нуждался. Это выглядело очень громоздко и казалось, что вышесказанное будет лучше.
Я думал, что сначала опубликую здесь как проверку работоспособности ..
Заранее спасибо.