Определите свой собственный макрос, который ссылается на __FUNCTION__
или __PRETTY_FUNCTION__
на основе вашего компилятора:
#ifdef _MSC_VER
#define MY_FUNCTION_MACRO __FUNCTION__ // or __FUNCSIG__
#else
#define MY_FUNCTION_MACRO __PRETTY_FUNCTION__
#endif
И затем используйте MY_FUNCTION_MACRO
в коде кросс-паттерна.
Обратите внимание, что MY_FUNCTION_MACRO
будет по-прежнему создавать разные строки между VC ++ и GCC / Clang.Это неизбежно и приближает вас как можно ближе.
Например:
int main()
{
std::cout << MY_FUNCTION_MACRO << std::endl;
}
выдаст «main» при использовании __FUNCTION__
или «int __cdecl main (void)»при использовании __FUNCSIG__
в VC ++, тогда как __PRETTY_FUNCTION__
выдает "int main ()" в GCC / Clang.