voID MemberFunctionbar([..],SomeClass param,[..]) { /* long common part */ if constexpr (Safecopy) { T copyOfParam(param); /* many lines of code */ Foo(std::move(copyOfParam)); } else { /* many lines of code (exactly the same as above) */ Foo(param); }}
现在我想将这些中间行只写一次,以获得更好的代码可维护性.此外,由于限制,不能进行进一步的功能调用.如果可能,代码应扩展为原始格式.
到目前为止,我正在考虑像这个宏(显然不起作用,因为宏中的预处理器指令不被解释):
#define IF_SAFE_copY_copY_ParaM(block) \ if constexpr (Safecopy) { \ T paramcopy(param); \ #define __the_param__ std::move(paramcopy) \ block \ #undef __the_param__ \ } else { \ #define __the_param__ param \ block \ #undef __the_param__ \ }voID MemberFunctionbar([..],[..]) { /* long common part */ IF_SAFE_copY_copY_ParaM({ /* many lines of code */ Foo(__the_param__); })}
即使有限制(没有额外的函数调用),我仍然愿意接受建议.
解决方法 您可以使用更高阶的函数:template <typename F>voID MemberFunctionbar( SomeClass param,F&& f) { if constexpr (Safecopy) { T copyOfParam(param); std::forward<F>(f)(/*...*/); Foo(std::move(copyOfParam)); } else { std::forward<F>(f)(/*...*/); Foo(param); }}
用法:
MemberFunctionbar(my_param,[](/*...*/){ /* block of code */ });总结
以上是内存溢出为你收集整理的c – 使用宏替换重复出现的代码块,略有不同全部内容,希望文章能够帮你解决c – 使用宏替换重复出现的代码块,略有不同所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)