将方法替换为特定参数计数的宏
Macro to replace Method with specific Argument count
我有一个带有两种不同声明的"计算"方法:
int calculate(int parmA);
int calculate(int parmA, int parmB, int parmC);
我只想将 calculate(int parmA) 替换为调用 'calculateNew':
int calculateNew(int parmA);
我尝试以两种不同的方式使用定义:
#define calculate calculateNew
#define calculate(parmA) calculateNew(parmA)
当我这样做时,由于参数数量不同,我在代码的其他部分出现编译器错误:
macro "calculate" passed 2 arguments, but takes just one
我在这里做错了什么?如何告诉预处理器仅在有一个参数时才替换?我能做到吗?
注意:我意识到这可能不是解决此问题的最佳方法,但需要以这种方式进行。
我从您的评论中了解到,您想根据预处理器时已知的某些属性调用一个或另一个。如果可以重命名原始重载,则可以制作内联蹦床。将原始单参数重载重命名为 originalCalculate
,然后添加以下内容:
inline int calculate(int parmA)
{
#if new_should_be_used()
calculateNew(parmA);
#else
originalCalculate(parmA);
#endif
}
如果您需要在不同的编译单元中执行不同的行为,只需将inline
替换为 static
即可。
重构绝对是要走的路,否则你的代码最终会变得一团糟,并且更难维护。但是,如果您真的想要一个"解决方法"(因为这就是其他所有内容),为什么不使用 3 个参数重载calculateNew
,而只需在重载的参数中调用初始版本:
int calculateNew (int a) { whatever };
int calculateNew (int a, int b, int c) { return calculate(a, b, c); };
然后,您可以使用 IDE 的 find & replace 将 calculate
替换为 calculateNew
。
考虑到评论和建议的答案,我实际上做了一些更改来实现我需要的,因为宏不适合这个问题。
尽管我不太喜欢这个解决方案,但它可以完成工作,稍后我会花一些时间来提出一个更强大的解决方案。
我做了一些重构,替换了两个声明
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
没有任何错误,一切都按预期工作。
谢谢你的帮助。
相关文章:
- 使用在用于SFINAE的void_t中具有参数的方法
- 如何制作一个将函数作为参数的类方法
- c++方法参数只能在linux的发布模式下自行更改
- 使用用户定义的参数调用future/async并调用类方法
- 将成员函数指针作为参数传递给模板方法
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 具有字符串化的可变参数宏的现代/通用方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 如何在方法中传递结构参数
- 如何将类成员方法的参数列表自动填充写入可变参数?
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- C++接口继承不同的参数方法
- C++ 模板:重载时找不到基类类型参数方法
- 如何使用迭代器作为参数方法?
- 具有不同亚型的参数方法
- 如何以相同的方法在子类中超载的相同方法来实现工作变量参数方法
- 如何将 C 中声明的可选参数方法转换为 c++
- 如果模板化"ResourceCache"需要不同的创建参数/方法,它们如何加载/创建 T 类型的资源?