Предположим, у вас есть семейство не связанных между собой классов, реализующих общую концепцию с помощью заданного метода, возвращающего значение:
class A { public: int val() const { ... } };
class B { public: int val() const { ... } };
предположим, что вам нужна общая свободная функция, возвращающая T
стандартное значение для любого типа NOT, реализующего метод val
, или вызов метода val
для ВСЕХ типов, которые имеют один:
template<class T> int val_of(const T& t) { return 0; }
template<class T> int val_of(const T& t) { return t.val(); }
Учтите, что A и B являются просто образцами: вы не знаете, сколько типов когда-либо будет реализовано val
, и сколько типов будет существовать, не реализуя его (поэтому явная специализация не будет масштабироваться).
Есть ли простой способ, основанный на стандартах С++, найти способ статически выбрать версию val_of
?
Я думал о std::conditional
или std::enable_if
, но я не нашел простого способа выразить это условие.