私は次のような状況に苦しんでいます。関数はテンプレート引数で呼び出します
#include "systemc.h"
template<int maxval>
class Foo {
/* Error: calls to constructors and functions cannot be part of a constant expression */
sc_uint<int(log2(double(maxval)))> a;
...
};
int main() {
Foo<10> foo;
...
return 0;
}
上記のように、テンプレートクラス 'Foo'にはテンプレートパラメータ 'maxval'があります。 'Foo'はまた、テンプレートパラメータ 'maxval'をインスタンス化のためのテンプレート引数に 'log2'関数とともに使用するテンプレート化されたクラスをメンバとして保持します。しかしながら、図示されたコードは、例えば、関数呼び出しを定数式の一部にすることはできません。 評価する可能性はありますか。 log2(maxval)をコンパイル時に使用し、その結果を 'Foo'内のテンプレート引数に使用するのか?
ありがとうございました。 (私はGCC 4.1.2を使用しています)
GCC 4.1は、constexprのサポートより古いです。 –
良い点、申し訳ありませんが、それに気付かなかった。コンパイラを更新する必要があります(オプションがある場合は、4.1が非常に古く、多くの新機能をサポートしていないので間違いなく実行する必要があります)、@ Florianのソリューションを使用してください。それを反映するように答えを更新します。 –
@ Stjepan:あなたの提案に感謝します!私はテンプレートベースの解決策をとらなければならないと思います。なぜなら、 'constexpr'はGCC5.2.0でも私のために動かないからです。 – chessat2002