Как статически проверить что у наследника есть нужная функция?
Пример:
template <typename Heir>
class SToString {
public:
SToString () {
// СТАТИЧЕСКАЯ ПРОВЕРКА
std::string (Heir::* tmp)() = &Heir::toStringImpl;
}
std::string toString() {
return static_cast<Heir*>(this)->toStringImpl();
}
};
class Foo : public SToString<Foo> {
public:
std::string toStringImpl() {
return "Foo";
}
};
Вот это вот работает, но только если в коде присутствует вызов конструктора Foo. И еще это костыль, который сыпет ворнинги.
Есть ли нормальное решение, например со static_assert
-ом.