C++ で仮想メンバ関数テンプレートを使いたい
class Base { public: template <typename T> virtual void print(const T& v) { ... } }; class Derived : public Base { public: template <typename T> virtual void print(const T& v) { ... } };
とか書きたい (けど動くわきゃない)。どうやれば書けるんだろうと思って、
#include <cassert> #include <iostream> class Base { public: virtual ~Base() {} template <typename T> void print(const T& v); }; class Derived : public Base { public: template <typename T> void print(const T& v) { std::cout << v << std::endl; } }; template <typename T> void Base::print(const T& v) { const std::type_info& true_type = typeid(*this); if (true_type == typeid(Derived)) { return static_cast<Derived*>(this)->print(v); } assert(0); } int main(void) { Base* b = new Derived(); b->print(3); b->print("hello"); delete b; return 0; }
と、してみたものの、いまいち。