在宏中拆分字符串

时间:2015-06-16 12:22:35

标签: c++ string split macros

我有一个名称及其名称空间,如BasicType::MyType

可以创建一个分割名称的宏,并且只使用范围运算符之后的部分(我想在没有第一部分的宏中创建一个MyType对象)?

编辑:

我正在使用名称空间为BasicType的不同类的库:

BasicType::ClassA
BasicType::ClassB
...

为了使用这些类,我需要注册它们。我必须将它们注册到另一个类,它需要类的名称,而不是命名空间:

BasicType::ClassA classa;
masterClass.register("ClassA", classa);

为了在模板中使用它们(因为我必须使用此命名空间的许多类),我正在创建一个使用宏自动化的特征(因为使用ClassA我还有ClassAImplClassATypeSupport等):

#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

中注册该类

1 个答案:

答案 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