在 C++ 中的可变长度函数中放置默认值参数的位置?
Posted
技术标签:
【中文标题】在 C++ 中的可变长度函数中放置默认值参数的位置?【英文标题】:where to place default value parameter in variable-length function in c++? 【发布时间】:2013-04-15 03:02:02 【问题描述】:在变长参数函数中,'...' 必须放在最后。并且默认值启用的参数也必须在最后。
那么,在同一个函数中需要两者怎么样?
现在我有一个日志实用程序: void MyPrint(int32_t logLevel, const char *format, ...),用于根据'logLevel'打印日志。
但是,有时我希望它可以用作: MyPrint("Log test number%d", number),不需要'logLevel'。
问题: Default arguments and variadic functions 没有帮助。
【问题讨论】:
Default arguments and variadic functions的可能重复 很好奇为什么你需要可变长度的参数列表和默认值......你应该能够想出一个使用其中一个或另一个的解决方案。 你想用MyPrint()
做的具体解决方案是有两个重载。
到目前为止,您尝试了哪些方法,结果如何?请代码。和编译器输出。
【参考方案1】:
在您的具体情况下,您可能只想制作两个版本的 MyPrint,例如:
MyPrint(const char *format, ...)
_logLevel = 1;
// stuff
MyPrint(int32_t logLevel, const char *format, ...)
_logLevel = logLevel;
//stuff
另一方面,Named Parameter Idiom 确实会提供替代解决方案:
class Abc
public:
MyPrint(const char *format, ...)
_logLevel = 1;
// stuff
Abc &setLogLevel(int32_t logLevel)
_logLevel = logLevel;
// stuff
;
所以你可以像这样调用 MyPrint():
MyPrint("blah,blah", 123);
或者像这样:
MyPrint("blah,blah", 123).setLogLevel(5);
【讨论】:
以上是关于在 C++ 中的可变长度函数中放置默认值参数的位置?的主要内容,如果未能解决你的问题,请参考以下文章