【发布时间】:2022-01-08 10:45:22
【问题描述】:
考虑以下几点:
struct S {
void f() {}
};
#define f 42
int main() {
S s;
s.f(); // error: expected unqualified-id
}
如何在不取消定义宏f 或更改成员函数名称的情况下调用成员函数S::f?有没有可能?
如果宏定义为#define f() 42(带括号),我可以像(s,f)() 那样解决问题。但是宏定义中没有括号。
【问题讨论】:
-
这能回答你的问题吗? Macro and function with same name
-
将
#define f 42更改为constexpr auto f = 42; -
只是macros are evil的原因之一。
-
曾几何时,我年轻的时候,将一个变量命名为
strlen。不好的举动。strlen“函数”被实现为一个宏,而不是得到一个“嘿,傻瓜,strlens 已经在使用”错误,我得到了十几页完全无意义的错误诊断。 -
您是否可以更改
S的定义?你能添加另一个成员函数到S,它只调用f吗?
标签: c++ macros member-functions