テンプレート化されたベース クラスメソッド (つまり、非テンプレート メソッドを持つテンプレート クラス) を子でオーバーライドするにはどうすればよいでしょうか?
#include <Windows.h>
#include <iostream>
struct S{};
template <typename T>
class Base
{
public:
Base()
{
Init(); // Needs to call child
}
virtual void Init() = 0; // Does not work - tried everything
// - Pure virtual
// - Method/function template
// - Base class '_Base' which Base extends that has
// pure virtual 'Init()'
// - Empty method body
};
class Child : public virtual Base<S>
{
public:
virtual void Init()
{
printf("test"); // Never gets called
}
};
int main()
{
Child foo; // Should print "test"
system("pause");
return 0;
}
子クラスの型をテンプレート引数として基本クラスに渡してから を使用する手法は知っていますが、static_cast
信じられないほど簡単なはずのことに対して、私にはあまりにも不潔です。
何時間も検索して、この特定のシナリオに対するコードや解決策を見つけることができないため、テンプレートの背後には把握していない基本的なアイデアがあると確信しています。