在 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++ 中的可变长度函数中放置默认值参数的位置?的主要内容,如果未能解决你的问题,请参考以下文章

函数2——参数

3.18课堂

Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数

python——函数重点总结

在 C++ 对象中放置 int 矩阵数组时遇到问题

C++类-使用默认参数的构造函数