其他分享
首页 > 其他分享> > 组织包含范围有限的const引用和C语言模板的代码的好方法

组织包含范围有限的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语句的两个分支中.但由于参考范围有限,我认为没有明确的方法.

我错过了一些非常简单的事吗?有什么建议?

解决方法:

反转控制流和编译时间调度程序的运行时.

这在中非常复杂,在中非常复杂.

你可以得到:

pick( some_boolean_statement,
  &getRef<TYPE_A>,
  &getRef<TYPE_B>
)([&](auto* getRef){
  const auto& ref = getRef();
  doStuff(ref);
});

但基本上每一步都是的痛苦.

另一种方法是制作std()或boost()变体,该变体存储指向TYPE_A或TYPE_B的指针.然后使用访问;但即使在这里,你也需要一个自动lambda来保持代码简短.

最简单的版本是:

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