重载函数调用编译时常量

OnM*_*uck 3 c++ c++11

我有兴趣知道是否可以区分使用编译时常量提供的参数的函数调用和没有编译时常量的函数调用?

例如:

int a = 2;
foo( a )  // #1: Compute at run-time
foo( 3 )  // #2: Compute at compile-time
Run Code Online (Sandbox Code Playgroud)

有没有办法提供区分这两种情况的重载?或者更一般地说,我如何检测文字类型的使用?

我查看了constexpr,但函数参数不能是constexpr.拥有相同的调用语法会很巧妙,但能够根据文字类型的参数生成不同的代码.

Bar*_*rry 8

您无法区分编译时文字int和运行时变量int.如果要这样做,可以提供只能在编译时工作的重载:

void foo(int ); // run-time

template <int I>
void foo(std::integral_constant<int, I> ); // compile-time
Run Code Online (Sandbox Code Playgroud)