我喜欢 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# 新手,只想做我的工作,而不是了解模板和泛型之间的细微差别。