我有一个要求,其中我有一组类,并且它们与另一组类具有一对一的对应关系。考虑这样的事情
一种)
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/