我要定义一个从另一个类名生成类名的宏(作为宏参数)。像
#define GenerateClass(InputType) \
class GeneratedClass_##InputType { \
};
但是,当InputType包含名称空间时,生成的类名无效。我可以想到以下可能的方法: 1.使用随机数(或全局唯一数)作为生成类的组成部分。类型名称仅用于注册,因此从最终用户的角度来看,真实名称并不重要。 2.将InputType转换为规范名称。 3.其他生成规范名称的方法。
有两种方法可以做到吗?
答案 0 :(得分:0)
只需将宏的使用括起来:
namespace foo {
GenerateClass(bar);
}
当然,这会将生成的类放入相同的名称空间。如果您不想这样做,请创建一个新的宏,该宏将名称空间作为单独的参数。
答案 1 :(得分:0)
如果名称无关紧要,那么它可以是模板专用名称,而不是标识符吗?
template <class> class GeneratedClass;
#define GenerateClass(InputType) \
template <> class GeneratedClass<InputType> { \
// ... other code? \
};
根据对InputType
所做的其他操作,您也许可以直接使用类模板,而不必专门对其进行类化或完全不使用宏。