我有一个要求,其中我有一组类,并且它们与另一组类具有一对一的对应关系。考虑这样的事情

一种)

 template < class A >

class Walkers
{
     int walk( Context< A >* context );
};

上下文类集不是模板。他们是个别类(class)。我需要在这两个集合之间创建一个映射。我可以想到的一种方法是创建一个类型列表,并在适当的位置引用该类。但是我觉得这更容易出错,因为我可能会与类型列表中的上下文不匹配。有人可以告诉我该怎么做吗?

谢谢,
Gokul。

最佳答案

我不确定您想做什么,您的要求或目标是什么,但是您可以尝试使用特征来定义关系:

// direct mapping
template <typename T>
struct context_of;

template <>
struct context_of<A> {
   typedef ContextA type;
};

// reverse mapping
template <typename T>
struct from_context;

template <>
struct from_context< ContextA > {
   typedef A type;
};

您发布的代码将写为:
template <typename T>
class Walker {
public:
   typedef typename context_of<T>::type context_type;
   int walker( context_type* context );
};

为了减少键入,您可以在类型列表之外构建映射(可能很复杂),或者您可能想使用一个辅助宏(更简单,更dirty):
#define GENERATE_CONTEXT_ENTRY( the_class, the_context ) \
   template <> struct context_of< the_class > { \
      typedef the_context type; }; \
   template <> struct from_context< the_context > \
      typedef the_class type; };

GENERATE_CONTEXT_ENTRY( A, ContextA );
GENERATE_CONTEXT_ENTRY( B, ContextB );

#undef GENERATE_CONTEXT_ENTRY

关于c++ - 两组类之间的映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2358131/

10-11 14:38