Допустим, у меня есть макрос. Есть ли способ определить, используется ли он в контексте функции-члена или не-члена? Т.е. существует ли указатель this
или нет? Я пробовал использовать constexpr if
, но не смог избавиться от ошибки invalid use of ‘this’ in non-member function
:
#include <typeinfo>
#include <type_traits>
#define macro(a, b, c) \
do { \
const char* class_name; \
if constexpr (std::is_class<decltype(*this)>::value) \
class_name = typeid(*this).name(); \
else \
class_name = ""; \
} while (0)
struct foo {
void member () {
macro(1, 2, 3);
}
};
void non_member() {
macro(4, 5, 6);
}
Я был бы признателен, если бы увидел, как эта проблема решается с помощью C ++ 14 (поскольку я привязан к it) и C ++ 20.