带有宏的 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
.
的常规函数声明
你已经在评论中看到,很多人不同意使用宏是一件好事,而且对于那些将使用你的库或在它上工作的人来说也是如此,所以无论如何,您在决定使用它时可能会考虑到这一点。
其他需要考虑的要点:
- 复制和调整代码行的成本并不高
- 您可以对齐参数以表明它们相同
- 函数声明的变化将需要更多的宏和更长的名称
- 带有参数的函数中的问题在显式时更容易被发现
我问的是提高代码可读性的方法
我能够为我正在制作的小型图书馆制作这样的宏
#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
.
你已经在评论中看到,很多人不同意使用宏是一件好事,而且对于那些将使用你的库或在它上工作的人来说也是如此,所以无论如何,您在决定使用它时可能会考虑到这一点。
其他需要考虑的要点:
- 复制和调整代码行的成本并不高
- 您可以对齐参数以表明它们相同
- 函数声明的变化将需要更多的宏和更长的名称
- 带有参数的函数中的问题在显式时更容易被发现