コンパイラにconstexpr
または関数への非可変入力のみを受け入れるように強制できますか?コンパイラがコンパイル時の引数(浮動小数点)のみを受け入れるようにする
私は関数にコンパイル時の値だけを許可したいのですが。テンプレートまたはその他の方法を使用しています。
Hereには、int
テンプレートの実例があります。 double
の問題は、それらをテンプレート引数として使用できないことです。重複したとして、この質問をマークしている人たちへの更新
#include <iostream>
template <double x>
void show_x()
{
std::cout<<"x is always "<<x<<" in the entire program."<<std::endl;
}
int main()
{
show_x<10.0>();
return 0;
}
error: ‘double’ is not a valid type for a template non-type parameter
、私が言っている:
私が尋ねる質問
How to solve problem A?
と
Solution B does not work for problem A, I need another solution
は、その後、あなたはソリューションB
が動作しない理由を私にリンクさ。
これは全く論理的ではありません。
更新:ユーザー迂回に関する
懸念が対処されました。ここ
@ m.s。、なぜ私は 'double'からテンプレートを作ることができないのですか?私はどのように関数にコンパイル時の値だけを許すことができるのか尋ねています。テンプレートまたはその他の方法を使用しています。 – ar2015
明確にするために、なぜこれを通常の関数パラメータとして渡せませんか? –
@OliverCharlesworth、セキュリティ上の理由から。私は時間同期のためにこの関数を使用する予定であり、そうでなければステップ時間が変わるべきではありません。そうでなければ、予測できない振る舞いが起こります。この問題を回避する方法は常にあります。しかし、私はこのように解決することを好む。 – ar2015