我有一个带有名称空间的类名,例如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
中注册该类。 最佳答案
您可以更改宏,使其接受两个参数:名称空间名称和类名称。就像是
#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
关于c++ - 在宏中分割字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30867479/