私は Loki の C++ HierarchyGenerator が大好きで、C# でも同じことをしたいと思っています。
最終的に欲しいのは、与えられた型リストの引数ごとに仮想関数を持つクラスです。
変換したい C++ コード:
template <class T>
class SenderV
{
public:
virtual void Send(T t) = 0;
};
template <int i>
class Foo // Just to make it easy to show typelist, it's not interesting.
{ /* doIt definition */ };
typedef TYPELIST_2(Foo<1>,Foo<2>) FooSendables;
template <typename TList=FooSendables>
class FooSend : public Loki::GenScatterHierarchy <TList,SenderV>
{
public:
void Send(Foo<1> f) {f.doIt();std::cout<<"Sending Foo1."<<std::endl;};
void Send(Foo<2> f) {f.doIt();std::cout<<"Sending Foo2."<<std::endl;};
};
C#で。Loki に慣れていない場合、上記の FooSend クラスはデフォルトで次のようになります。
class FooSend : SenderV<Foo<1> >, SenderV<Foo<2> >//including every type in TList
{ /*... as above */};
ただし、新しい TList が指定されると、TList のタイプに基づいて別の階層になります。
また、Loki に GenLinearHierarchy が存在する場合は興味があります。
私はいつでも言語間の翻訳を試みることができましたが、私は C# を初めて使用し、自分の仕事をしたいだけで、テンプレートとジェネリックの微妙な違いを学びたくないので、それを試すことはあまり好きではありません。