2017-03-29 9 views
0

independent_bits_engineは、第parametrのビットを生成する必要がどのくらいの定義テンプレートクラスindependent_bits_engineを使用して生成するビット数を定義する方法は?

template< 
    class Engine, 
    std::size_t W, 
    class UIntType 
> class independent_bits_engine; 

あります。私はそのことを知らない。私は実行時にこの質問をユーザに聞いてみたいと思います。それはどうですか?

+0

テンプレートのパルメータはコンパイル時になるため、実行時に設定することはできません。与えられたビット数を生成したい場合は、これを実行するための他のツールがあります。 – doctorlove

答えて

0

できません。テンプレート引数はコンパイル時に定義する必要があります。これを回避するには

、あなたがこの記事を見て答えることができる:Wは大きな値にすることができた場合

template<class Engine, class UIntType> 
independent_bits_engine CreateEngine(std::size_t w) { 
    if (w == 0) { 
     return independent_bits_engine<Engine, 0, UIntType>(); 
    } else if (w == 1) { 
     return independent_bits_engine<Engine, 1, UIntType>(); 
    } 
    Etc; 
} 

Specify template parameters at runtime

アイデアは、実行時の値をチェックするためにifステートメントを使用することですifs(リンクの例)を生成するのに​​3210を使いたいかもしれません。

Wの最大値が大きいほど、independent_bits_engineのクラスがインスタンス化され、コンパイルが遅くなるほど、実行時の完全なソリューションに切り替えることができます。

+0

リンクをソリューションとして、または回避策として投稿するときには、それを少し説明すればもっと便利になります。 – yakobom

+0

チップをありがとう!私はちょうど答えを更新しました。 –

+0

よくやった。 – yakobom

0

C++のテンプレートはちょうどMICROのように、コンパイル時に展開されます。c++ template explanation wikipedia

あなたはテンプレートのparamsが既に決定されているC++プログラムを実行します 。

テンプレートを使用してindependent_bits_engineを実装すると主張する場合は、テンプレートparamを削除する必要があります。std :: size_t W 実行時にsize_paramをindependent_bits_engineオブジェクトに渡すことができます。

関連する問題