组织包含范围有限的const引用和C语言模板的代码的好方法
作者:互联网
所以,我有以下代码:
if (some_boolean_statement)
{
const auto& ref = getRef<TYPE_A>(); //getRef returns TYPE_A
doStuff(ref);
}
else
{
const auto& ref = getRef<TYPE_B>(); //getRef returns TYPE_B
doStuff(ref);
}
所以,我想获得一个常量引用引用,它取决于some_boolean_statement为true或false是TYPE_A或TYPE_B.
在那之后,无论如何,我将调用一个可以接受这两种类型作为输入的重载函数doStuff().
笔记:
> getRef< TYPE_A>()和getRef< TYPE_B>()对不同的数据进行操作,几乎无关
> some_boolean_statement是运行时
现在,我不喜欢我必须写doStuff(ref);在if语句的两个分支中.但由于参考范围有限,我认为没有明确的方法.
我错过了一些非常简单的事吗?有什么建议?
解决方法:
反转控制流和编译时间调度程序的运行时.
在c++14你可以得到:
pick( some_boolean_statement,
&getRef<TYPE_A>,
&getRef<TYPE_B>
)([&](auto* getRef){
const auto& ref = getRef();
doStuff(ref);
});
但基本上每一步都是c++11的痛苦.
另一种方法是制作std(c++17)或boost(c++03)变体,该变体存储指向TYPE_A或TYPE_B的指针.然后使用访问;但即使在这里,你也需要一个自动lambda来保持代码简短.
最简单的c++14版本是:
auto doWork = [&](const auto& ref) {
doStuff(ref);
};
if (some_boolean_statement) {
doWork(getRef<TYPE_A>());
} else {
doWork(getRef<TYPE_B>());
}
标签:c,c11,templates,auto,reference,c++11,c++14,c++14,c++11,c++17,c++03,c++14 来源: https://codeday.me/bug/20190828/1747508.html