在宏中拆分字符串
Split string in macro
我有一个 class 名称及其命名空间,例如 BasicType::MyType
。
是否可以创建一个拆分名称并仅使用范围运算符之后的部分的宏(我想在没有第一部分的宏中创建一个 MyType
对象)?
编辑:
我在命名空间 BasicType
:
中使用具有不同 classes 的库
BasicType::ClassA
BasicType::ClassB
...
为了使用这些 classes,我需要注册它们。我必须用另一个 class 注册它们,它需要 class 的名称,没有命名空间:
BasicType::ClassA classa;
masterClass.register("ClassA", classa);
为了在模板中使用它们(因为我必须使用这个命名空间的许多 class),我正在创建一个特征,用宏自动执行(因为 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
现在我想在这个特征中添加一个名为 class 的字符串,这样我就可以用它在 masterClass
中注册 class
您只需更改宏,使其接受两个 参数:名称空间名称和class 名称。像
#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
我有一个 class 名称及其命名空间,例如 BasicType::MyType
。
是否可以创建一个拆分名称并仅使用范围运算符之后的部分的宏(我想在没有第一部分的宏中创建一个 MyType
对象)?
编辑:
我在命名空间 BasicType
:
BasicType::ClassA
BasicType::ClassB
...
为了使用这些 classes,我需要注册它们。我必须用另一个 class 注册它们,它需要 class 的名称,没有命名空间:
BasicType::ClassA classa;
masterClass.register("ClassA", classa);
为了在模板中使用它们(因为我必须使用这个命名空间的许多 class),我正在创建一个特征,用宏自动执行(因为 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
现在我想在这个特征中添加一个名为 class 的字符串,这样我就可以用它在 masterClass
您只需更改宏,使其接受两个 参数:名称空间名称和class 名称。像
#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