是否可以使用带有可变参数且没有命名参数的函数?
例如:
SomeLogClass("Log Message Here %d").Log(5);
SomeLogClass("Log Message Here %d").Error(5);
答案 0 :(得分:2)
查看QString's arg方法。这些似乎是你正在寻找的东西。
你绝对可以自己动手,虽然实现可能不是很简单,特别是如果你希望它支持printf格式说明符。如果不需要printf样式,那么链接replace_all
类型的呼叫听起来可行。
答案 1 :(得分:1)
你能写上面那样的代码吗 - 是的,你可以。但是如果没有至少一个非变量参数,你就无法移植写一个可变参数函数。例如,在printf()中,这是格式字符串。换句话说,您可以编写如下函数:
int printf( const char * format, ... );
但不是:
int printf( ... );
答案 2 :(得分:1)
我来自哪里,我们使用它:
Log << "LogMessageHere: " << ErrorClass << 5 << whatever << std::endl;
这不是你问题的答案,但它是你问题的解决方案,我认为它更像是c ++。
答案 3 :(得分:0)
正确的答案是否定的,你不能只定义变量参数,因为C / C ++中这样做的机制使用固定的参数来计算地址,如下所示:
void f(int a, ...) {
va_list args;
va_start(args, a); // without a, this macro DOESN'T WORK!!!
}
您标记的答案通过默认参数来绕过它。但这应该告诉新手的是,默认论证并不意味着论证没有通过,这意味着你不必输入它们。
void f (int a = 0, ...)
所以当你打电话给f时,你可以写:
f();
但在内部,它正在写f(0)