我有一个功能
AddSprintf(char* , ... )
如果有人在没有两个参数的情况下调用它,我想编译时错误。 目前,如果有人打电话
AddSprintf("hello")
它有效。但我想禁用这样的呼叫。 有没有办法使用g ++我可以强制传递参数?
答案 0 :(得分:7)
重载AddSprintf:
void AddSprintf(const char* , ... ) {}
void AddSprintf(const char*);
然后在编译AddSprintf("hello")
但请记住,使用C ++ 11时,您应该使用可变参数模板,因为它们是类型安全的。
答案 1 :(得分:0)
怎么样?
AddSprintf(char* , char*, ... )
答案 2 :(得分:0)
你不能,真的。点代表“零或多个参数”,并且无法知道是否存在任何参数。除了可能使用汇编程序并对堆栈指针进行一些检查。
答案 3 :(得分:0)
正如0A0D所说,它是可变参数 - 根据定义,编译器可以正常使用它。如果你希望它在编译时失败,你可能不得不采取措施 - 例如,如果你是单元测试,有代码使得函数失败并带有一个参数调用,这样新程序员就会知道他们做不到这一点。
那就是说,你为什么要这样做?您的问题可能有更好的解决方案。
答案 4 :(得分:0)
如果你想坚持使用相同的名称,那么你可以使用variadic宏:
#define AddSprintf(X,...) AddSprintf(X,__VA_ARGS__)
但要非常小心这个解决方案,因为AddSprintf
在预处理阶段首先作为文本替换工作。然后只有它才是一个功能。