Интересно, как определить макрос, который для данного имени класса выводит его пространство имен и имя класса в формате, например: «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*/);
Я хочу, чтобы ул быть "NS.SNS.MyClass". Мне бы очень хотелось, чтобы макрос имел, по возможности, параметры профиля (что означает один или ничего).
альтернативы Интересно, если такая вещь может быть сделано с помощью шаблонов с чем-то вроде:
string NS::SNS::MyClass::str = GetTypeNameFormater<NS::SNS::MyClass>();
Как сделать такую вещь (с использованием форсирования, СТЛ и имеющий только C++ 03 под рукой)?
Очевидно, это не макрос. Пространства имен требуют синтаксического анализа, а препроцессор (который обрабатывает макросы) работает до разбора. '__func__' - не настоящий макрос, несмотря на его внешний вид. – MSalters