【发布时间】:2018-01-23 08:43:19
【问题描述】:
例如:
void foo()
{
if constexpr (...)
int x = 5;
else
double x = 10.0;
bar(x); // calls different overloads of bar with different values
}
这在 D lang 中很常见,但我没有找到有关 C++17 的信息。
当然,可以使用类似的东西
std::conditional<..., int, double>::type x;
但仅限于基本情况。即使是不同的初始化器(如上)也会产生大问题。
【问题讨论】:
-
不,由于范围界定,这是不可能的。而是调用
if或else中的函数。可能还有其他解决方案,但在不确切知道这应该解决什么问题、用例的情况下,目前真的不可能多说。 -
在调用
bar()时,您的变量都不存在。你的问题只是不恰当的,与constexpr无关。 -
“调用内部函数” - 这意味着所有代码的重复,并可能与多个 if 表达式组合爆炸。如果分支没有作用域,则在 D 中为静态。如果真的需要范围,您仍然可以添加额外的 {}。
-
@aaalex88:重载解析不能动态发生;为
bar(x)选择的函数必须在编译时已知。 -
@AndyG 它没有:
if是 constexpr,所以x的类型在编译时是已知的
标签: c++ metaprogramming c++17 if-constexpr