私はLokiのC++ HierarchyGeneratorが好きで、C#でも同じことをしたいと思います。Lokiのタイプリスト類似::階層ジェネレータを使用したタイプリスト
私が最後に望むのは、与えられたタイプリストの引数ごとに仮想関数を持つクラスです。
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#で:
C++のコード私が変換したいと思います。あなたはロキに精通していない場合は、上記のFooSendクラスがデフォルトになります
class FooSend : SenderV<Foo<1> >, SenderV<Foo<2> >//including every type in TList
{ /*... as above */};
しかし、新しいのTListが与えられたとき、それはTListの中の種類に基づいて、異なる階層になるだろう。
LokiにGenLinearHierarchyが存在する場合は、これも興味があります。
私はいつも言語間の翻訳を試みることができましたが、私はC#を初めて使っていて、テンプレートとジェネリックの微妙な違いを学ぶのではなく、自分の仕事をしたいと思っています。
LinearHierarchyは多重継承ではない(それは継承のラインである - 上記の例では、それは 'FooSendだろう:FooSend>'、ここで 'FooSend >:FooSend >') –
Dale
しかし、C #ScatterHierarchyを行う方法は、上記のすべてを持ちますが、クラス継承の代わりに 'SenderV>'、 'SenderV > 'というインターフェースを持つことです。ポイントは、クラスを "Foo <1>' - 'Foo '型の "Sender"として記述することです。私が入れたい~20個のクラス( 'Foo <1>'〜 'Foo <20>')があると思いますTypeList、そして私はこのパターンに従ういくつかのクラスを持っていたいと思いますが、すべてが少し異なるタイプリスト(マージ可能です)を持っているので、このルートに向かって私をプッシュするのは純粋な怠惰ではありません。 –
Dale