Мне понравился C ++ HierarchyGenerator от Loki, и я хочу сделать то же самое в 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.
Меня также интересует GenLinearHierarchy в Loki, если он существует там.
Я всегда мог пытаться переводить между языками, но я не большой поклонник пробовать это, так как я новичок в C # и просто хочу выполнять свою работу, а не изучать тонкую разницу между шаблонами идженерики.