コンパイル時定数引数で呼び出された場合、引数の値が0ならばコンパイル時エラーが発生するような関数を記述しようとしています。 [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)ので、推測することはできません'正しいことはできません –
コンパイル時間または実行時。あなたは選択する(または2つの機能を作る)必要があります。 – xinaiz
テンプレートのものではなく 'constexpr'でそれを行う方法はありますか? – AJMansfield