唯一类名称的C ++宏

时间:2018-07-22 02:36:14

标签: c++

我要定义一个从另一个类名生成类名的宏(作为宏参数)。像

#define GenerateClass(InputType) \
class GeneratedClass_##InputType { \
};

但是,当InputType包含名称空间时,生成的类名无效。我可以想到以下可能的方法: 1.使用随机数(或全局唯一数)作为生成类的组成部分。类型名称仅用于注册,因此从最终用户的角度来看,真实名称并不重要。 2.将InputType转换为规范名称。 3.其他生成规范名称的方法。

有两种方法可以做到吗?

2 个答案:

答案 0 :(得分:0)

只需将宏的使用括起来:

namespace foo {
    GenerateClass(bar);
}

当然,这会将生成的类放入相同的名称空间。如果您不想这样做,请创建一个新的宏,该宏将名称空间作为单独的参数。

答案 1 :(得分:0)

如果名称无关紧要,那么它可以是模板专用名称,而不是标识符吗?

template <class> class GeneratedClass;

#define GenerateClass(InputType)                \
template <> class GeneratedClass<InputType> {   \
   // ... other code?                           \
};

根据对InputType所做的其他操作,您也许可以直接使用类模板,而不必专门对其进行类化或完全不使用宏。