带有宏的 C++ 函数声明

C++ functions declaration with macros

我问的是提高代码可读性的方法

我能够为我正在制作的小型图书馆制作这样的宏

#define fun(name, arg1, arg2) void name(int arg1, int arg2)

注意:int 是一个存在的 class,但我用 int 替换它所以任何人都可以 运行 它

这将允许我使用这段代码创建一个函数:

fun(testFunction, x, y) {
  // do stuff
  std::cout << x << y << std::endl;
}

然后在我的主要部分:

int main() {

  testFunction(1, 2);

  return 0;
}

这很好用(至少在 Visual Studio 中,还没有在 GCC 中测试过,但我认为它在那里也能用)。

是否可以制作如下宏:

#define fun name(arg1, arg2)     void name(int arg1, int arg2)

所以一个宏允许我声明一个函数,如:

fun testFunction(x, y) {
  // do stuff
}

我真正想问的是是否有办法制作一个宏 允许我这样做(例如)

CustomClassTemplate doStuff(CustomClass& arg1, CustomClassTemplate arg2, Library::Binary::Binary bin) {

  // do stuff

  return CustomClassTemplate(/*blah, blah, blah*/);

}

对此:

fun doStuff(arg1, arg2, bin) {
  // do stuff

  return CustomClassTemplate(/* blah blah blah*/);
}

您可以为每个参数创建一个空 class

正如您已经发现的那样:从技术上讲可以做到,但不能在 #define fun name(arg1, arg2) 中完成,我认为这是一件好事,因为您想隐藏您正在使用宏的事实,而这应该很清楚足够。此外 fun doStuff(arg1, arg2, bin) 看起来像一个带有空参数类型(没有参数名称)并返回 fun.

的常规函数​​声明

你已经在评论中看到,很多人不同意使用宏是一件好事,而且对于那些将使用你的库或在它上工作的人来说也是如此,所以无论如何,您在决定使用它时可能会考虑到这一点。

其他需要考虑的要点:

  • 复制和调整代码行的成本并不高
  • 您可以对齐参数以表明它们相同
  • 函数声明的变化将需要更多的宏和更长的名称
  • 带有参数的函数中的问题在显式时更容易被发现