我想写一个函数,如果使用编译时常量参数调用它将触发编译时错误,如果参数的值doesn与static_assert
不匹配,但仍可以在运行时使用计算值进行调用。如果编译时常量参数错误,生成编译时错误
东西有点像这样:
template<int N> void f(N){
static_assert(N == 5, "N can only be 5.");
do_something_with(N);
}
void f(int N){
if(N == 5){
do_something_with(N);
}
}
volatile int five = 5;
volatile int six = 6;
int main() {
f(5); //ok
f(6); //compile-time error
f(five); //ok
f(six); //run-time abort
return 0;
}
我怎样才能做到这一点?
此外,如果可能的话,我希望能够保留简单的f(something)
语法,因为此代码旨在用于不熟悉模板语法的初学者程序员应该可以使用的库。
值不能推断这样的线'模板空隙F(N){ '不可能是正确的 –
编译时间或运行时间。你必须选择(或做两个功能)。 – xinaiz
有没有办法用'constexpr'而不是模板来做? – AJMansfield