我有一个'计算'方法有两个不同的声明:
int calculate(int parmA);
int calculate(int parmA, int parmB, int parmC);
我想通过调用' calculateNew'来替换只计算(int parmA):
int calculateNew(int parmA);
我尝试过以两种不同的方式使用define:
#define calculate calculateNew
#define calculate(parmA) calculateNew(parmA)
当我这样做时,由于参数的数量不同,我在代码的其他部分出现编译错误:
macro "calculate" passed 2 arguments, but takes just one
我在这里做错了什么?如果只有一个参数,我如何告诉预处理器替换?我甚至可以这样做吗?
注意:我意识到这可能不是解决此问题的最佳方法,但需要这样做。
答案 0 :(得分:1)
我从你的评论中得到它,你想根据预处理器时间已知的某些属性调用其中一个。如果您可以重命名原始过载,则可以制作内联蹦床。将原始单参数重载重命名为originalCalculate
,然后添加:
inline int calculate(int parmA)
{
#if new_should_be_used()
calculateNew(parmA);
#else
originalCalculate(parmA);
#endif
}
如果您需要在不同的编译单元中使用不同的行为,只需将inline
替换为static
。
答案 1 :(得分:1)
重构肯定是要走的路,因为否则你的代码会陷入混乱,并且难以维护。
但如果你真的想要一个"解决方法" (因为那是其他所有内容)为什么不用3个参数重载calculateNew
并在重载的版本中调用初始版本:
int calculateNew (int a) { whatever };
int calculateNew (int a, int b, int c) { return calculate(a, b, c); };
然后你可以使用find&替换您的IDE以将calculate
替换为calculateNew
。
答案 2 :(得分:0)
考虑到评论和建议的答案,我实际上做了一些改变以实现我所需要的,因为宏并不适合这个问题。
即使我不太喜欢这个解决方案,它也可以完成工作,稍后我会花一些时间来提出更强大的解决方案。
我做了一些重构,取代了两个声明
int calculate(int parmA);
int calculate(int parmA, int parmB, int parmC);
与
int calculateSimple(int parmA);
int calculateComplex(int parmA, int parmB, int parmC);
这样我就可以轻松地用宏替换呼叫
#define calculateSimple calculateNew
没有任何错误,一切都按预期工作。
感谢您的帮助。