template class mit zusätzlicher memer function fuer bestimmten parameter
-
hallo leute
hier 3 beispielklassen:
class class_1 { public: using value_type = int; virtual auto value(value_type val) -> void = 0; }; class class_2 { public: using value_type = float; virtual auto value(value_type val) -> void = 0; }; class class_3 { public: using value_type = double; virtual auto value(value_type val) -> void = 0; virtual auto additional_info(int data( -> void = 0; };
bis auf die 2te methode in class_3 koennte ich nun die implementierung als template machen:
template<class T> class basic_class : public T { public: virtual auto value(value_type val) -> void { m_value = vall; } private: value_type m_value; //int m_additional_info; }; using int_class = basic_class<class_1>; using float_class = basic_class<class_2>; using double_class = basic_class<class_3>;
gibt es nun eine möglichkeit das ich fuer den template-parameter class_3 noch die 2te methode definieren und die member-variable m_additional_info anlegen kann? oder muss ich die basisklassen aufteilen und von class_3 nochmal erben ?
Meep Meep
-
Da additional_info virtuell ist, helfen SFINAE-tricks nicht.
Es bleibt dir nichts anderes übrig, als basic_class partiell zu spezialisieren, wenn additional_info dort überschrieben werden soll. Evtl. genügt es aber auch, die Basisklasse zu ersetzen, etwatemplate <typename T> class implement_additional_info : public T { public: virtual void additional_info(int val) override { ... }; template <typename T> class basic_class : public std::conditional_t<has_addional_info<T>{}, implement_additional_info<T>, T> { ...
mit einem entsprechenden Prädikat has_addional_info.
-
ok, danke