将宏重载为变量和函数



首先,有很多关于重载宏的帖子:

  • 宏可以通过参数的数量重载吗?
  • c++重载宏宏观重载
  • 参数个数重载宏
  • 等等…

然而,它们都问关于可变宏的问题.

我想问的是以下几点是否可能:

#define FOO 3
#define FOO(a,b) a+b
int main() {
int a = FOO(0,1);
int b = FOO;
std::cout << a + b;
return 0;
}

我希望它也能在clang上工作。

不,宏并没有那么聪明。它们是一个简单的文本替换,由预处理器执行。

以多一组括号为代价,你可以重载函数,如:

int foo () { return 3; }
int foo (int a, int b) { return a + b; }
int main ()
{
int a = foo (0, 1);
int b = foo ();
}

如果你想让你的foo使用更广泛的类型,让它们成为模板。

这不是一个宏,但看起来像

struct SmartMacro {
constexpr operator int() const noexcept { return 3; }
constexpr int operator()(int a, int b) const noexcept { return a + b; }
};
constexpr SmartMacro FOO;
int main() {
int a = FOO(0,1);
int b = FOO;
std::cout << a + b;
return 0;
}

相关内容

  • 没有找到相关文章

最新更新