我有一个名称及其名称空间,如BasicType::MyType
。
可以创建一个分割名称的宏,并且只使用范围运算符之后的部分(我想在没有第一部分的宏中创建一个MyType
对象)?
编辑:
我正在使用名称空间为BasicType
的不同类的库:
BasicType::ClassA
BasicType::ClassB
...
为了使用这些类,我需要注册它们。我必须将它们注册到另一个类,它需要类的名称,而不是命名空间:
BasicType::ClassA classa;
masterClass.register("ClassA", classa);
为了在模板中使用它们(因为我必须使用此命名空间的许多类),我正在创建一个使用宏自动化的特征(因为使用ClassA
我还有ClassAImpl
,ClassATypeSupport
等):
#define BASICTYPE_TRAITS(className) \
template <> \
struct DDSTraits<className> \
{ \
using TypeSupportImpl = className##Impl; \
using TypeSupport_var = className##TypeSupport; \
};
template <typename T>
struct BASICTYPE_TRAITS
{
};
....
BASICTYPE_TRAITS(BasicType::ClassA) // after this I've my trait
现在我想在此特征中添加一个带有类名称的字符串,因此我可以使用它在masterClass
答案 0 :(得分:1)
您只需更改宏即可接受两个参数:命名空间名称和类名称。像
这样的东西#define BASICTYPE_TRAITS(namespaceName, className) \
template <> \
struct DDSTraits<namespaceName::className> \
{ \
using TypeSupportImpl = namespaceName::className##Impl; \
using TypeSupport_var = namespaceName::className##TypeSupport; \
};
template <typename T>
struct BASICTYPE_TRAITS
{
};
....
BASICTYPE_TRAITS(BasicType, ClassA) // after this I've my trait