これは、テンプレートを使用してやりたいことです。
struct op1
{
virtual void Method1() = 0;
}
...
struct opN
{
virtual void MethodN() = 0;
}
struct test : op1, op2, op3, op4
{
virtual void Method1(){/*do work1*/};
virtual void Method2(){/*do work2*/};
virtual void Method3(){/*do work3*/};
virtual void Method4(){/*do work4*/};
}
これらのメソッド宣言を提供すると同時にそれらを仮想化するテンプレートクラスから単純に派生するクラスが必要です。これは私が思いついたものです:
#include <iostream>
template< size_t N >
struct ops : ops< N - 1 >
{
protected:
virtual void DoStuff(){ std::cout<<N<<std::endl; };
public:
template< size_t i >
void Method()
{ if( i < N ) ops<i>::DoStuff(); }
//leaving out compile time asserts for brevity
};
template<>
struct ops<0>
{
};
struct test : ops<6>
{
};
int main( int argc, char ** argv )
{
test obj;
obj.Method<3>(); //prints 3
return 0;
}
ただし、おそらくご想像のとおり、継承した 6 つのメソッドのいずれもオーバーライドできません。ここで明らかに何かが欠けています。私のエラーは何ですか?いいえ、これは宿題ではありません。これは好奇心です。