【发布时间】:2013-12-02 10:25:39
【问题描述】:
我想知道如何定义一个宏,该宏将针对给定的类名以如下格式输出其命名空间和类名:“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*/);
我想让 str 成为“NS.SNS.MyClass”。如果可能的话,我希望该宏具有尽可能多的参数(意味着一个或没有)。
另外,我想知道是否可以使用具有以下内容的模板来完成这样的事情:
string NS::SNS::MyClass::str = GetTypeNameFormater<NS::SNS::MyClass>();
如何做这样的事情(使用 boost、stl 并且手头只有 C++03)?
【问题讨论】:
-
显然不可能是宏。命名空间需要解析,预处理器(处理宏)在解析之前运行。
__func__不是一个真正的宏,尽管它看起来很像。