我有一个带有名称空间的类名,例如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中注册该类。

最佳答案

您可以更改宏,使其接受两个参数:名称空间名称和类名称。就像是

#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/

10-10 02:33