2

次のような C++ マシン ライブラリ (dlib) のクラス内に typedef があります。

typedef dlib::matrix<double, 64, 1> sample_type;

ただし、64 は実際には変数です。クラス全体で typedef が見えるようにしたいのですが、コンストラクターが呼び出されたときに 2 番目のパラメーター (64) を引数にしたいと考えています。typedef をどこでも見えるようにしながら、どうすればこれを達成できますか?

4

3 に答える 3

2

これは実際、dlibWebページでよくある質問の1つです。あなたがすることはこれです:

typedef dlib::matrix<double, 0, 1> sample_type;
sample_type myvect(64); // now the 64 is a runtime argument.
于 2013-03-02T05:35:44.350 に答える
2

コンストラクターの引数にはその制限がないのに対し、テンプレート パラメーターはコンパイル時に認識されている必要があるため、これは現在の設計では不可能です。

この理由は、テンプレートの展開はそれ自体の型として見なされる必要があるためです。テンプレート パラメータは型の一部です (std::vector<int>は とは異なる型ですstd::vector<float>)。

于 2012-06-23T06:50:59.367 に答える
0

一般的なケースとして、これは不可能です。あなたは以下を書きたいかもしれませんが:

template <int matrix_size>
struct sample_type : public dlib::matrix<double, matrix_size, 1>
{
    sample_type data1;
    sample_type<16> data2;
};

sampe_type<32> var32;
sampe_type<36> var36;

テンプレート内で2つのデータフィールドが定義されていることに注意してください。最初のデータフィールドは、現在のインスタンス化パラメーターで作成されます。2番目のデータフィールドは、明示的なパラメータを使用して作成されます。

ご覧のとおり、テンプレートの内側は希望どおりのようですが、外側では定数のみを使用できます。

于 2012-06-23T08:26:37.047 に答える