У меня есть интерфейс (там отсутствует много членов, но помните, что этот интерфейс является обязательным). Мне понадобятся 5 унаследованных от него классов, которые будут иметь атрибут . Так, Ins \ TEAD в реализации 5 классов (для полукокса, короткий, INT, поплавка, двойной), я думал о классе шаблона:C++ Сделать общий интерфейс
class my_interface
{
public:
virtual [various_types] getValue() const = 0;
};
template<typename T>
class my_class : public my_interface
{
private:
T _value;
public:
my_class(T value) : _value(value) {} // initialize the attribute on construct
virtual T getValue() const { return _value; }
};
... так что-то подобное может работать:
void my_function()
{
my_inteface* a = new my_class<char>(42);
my_interace* b = new my_class<short>(21);
int result;
result = a->getValue() + b->getValue();
}
Но я не понимаю, как я мог это сделать. Кажется, вы не можете сделать шаблоны на интерфейсе чистым виртуальным. Для меня единственным способом, который мог бы работать, было бы сделать getValue(), чтобы всегда возвращать double, так как это самый высокий размер, который мне нужен. Однако мне не нравится это решение.
Возможный дубликат [C++ Virtual template method] (http://stackoverflow.com/questions/7968023/c-virtual-template-method) – MatthiasB
Нужны ли вам все арифметические операции над вашими типами или ограничены? У вас всегда есть проблема, что вы не знаете фактического типа подкласса. – MatthiasB
Ваша проблема в том, что вы не можете иметь такие, как '[different_types]', как тип возврата виртуальной функции вообще, если вы не сделаете также 'my_interface' класс шаблона. –