Duc*_*een 8 c++ boost class c++03
我不知道如何界定,将在格式定的类名称输出其命名空间和类名像宏:"Namespace.SubNamespace.ClassName"?
所以写这样的东西:
// MyClass.h
#include <string>
namespace NS {
namespace SNS {
class MyClass {
static std::string str;
};
}
}
//MyClass.cpp
#include <MyClass.h>
using namespace std;
string NS::SNS::MyClass::str = SUPER_MACRO(/*params if needed yet none would be prefered*/);
Run Code Online (Sandbox Code Playgroud)
我想让str成为"NS.SNS.MyClass".如果可能的话,我希望那个宏有fiew params(意思是一个或没有).
或者我想知道是否可以使用以下类似的模板来完成这样的事情:
string NS::SNS::MyClass::str = GetTypeNameFormater<NS::SNS::MyClass>();
Run Code Online (Sandbox Code Playgroud)
怎么做这样的事情(使用boost,stl并且手头只有C++ 03)?
没有标准方法可以做到这一点。提供有关范围信息的唯一标准宏是 C99 宏__func__。
不过,您可以做的是获取符号的名称std::typeinfo,然后将其放入编译器特定的分解 API 中,然后解析出名称空间。
http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html给出了如何做到这一点的示例。这应该适用于 clang 和 OS X。
或者,您可以编写一组宏来定义名称空间和相应的静态字符串,然后从那里将字符串组合在一起。
这两种选择都不会特别漂亮。