0

C++ のテンプレート クラスを理解しようとしています。まず、この行の意味を理解したいと思います。

template <typename T, typename Ord = columns, typename All = abc::allocator<T,16> >
class matrix

ここで、columns と allocator はそれぞれ別の場所 (名前空間 abc の 2 番目) で定義された構造体とクラスです。私を悩ませているのは、すでに初期化されている型名を持っているように見えるという事実です。これは何を意味するのでしょうか?このテンプレートを使用する場合、Ord と All の型名も初期化する必要がありますか?

さらに、この唯一のコンストラクターもあります。

explicit matrix(unsigned int rows = 0, unsigned int cols = 0, T init = T())

しかし、すでに初期化されているようです。そして、initは何を意味するのでしょうか?

すべてのコードを確認しましたが、理解を深めるのに役立つものは何もありません。ご清聴ありがとうございました。

編集:ご回答いただきありがとうございます。少し安心させてください(私はC ++の初心者です):

int const& operator() operator()(unsigned int i, unsigned int j) const

このメソッドは、クラス foo を初期化するときに、foo()(1,2) で呼び出すことができることを意味します。ここで、i=1 および j=2 です。私は正しいですか?そして、2つの「const」は何を指していますか?

ありがとうございました!

4

4 に答える 4

1
template <typename T, typename Ord = columns, typename All = abc::allocator<T,16> >
class matrix
{ 
    //...
};

これらはデフォルトのテンプレート パラメータであり、デフォルトの関数引数と同じように機能します。指定することはできますが、指定しない場合はデフォルトになります。

そして、関数のデフォルト引数の使用例を見ることができます。


結論 - 次の行はすべて正しいです。

matrix<int> a; // matrix<int, columns, abc::allocator<int, 16> >
matrix<int, rows> b; // matrix<int, rows, abc::allocator<int, 16> >
matrix<int, columns, abc::other_allocator<int, 32> > c; // obvious

matrix<int> a = matrix<int>(); // constructor called with 0, 0 and 
// int() - default constructed T - in this case, int -  as arguments
matrix<int> a(1, 2); // constructor called with 1, 2 and int() as arguments
matrix<int> a(1, 2, 100); // obvious
于 2012-10-21T15:10:38.347 に答える
1

これは、クラスのユーザーが適切なデフォルト値を設定したことを意味します。たとえば、指定することはできますが、指定する必要はありませ。コンストラクタの引数も同様です。議論の意味については、あなただけが答えることができます。

于 2012-10-21T15:06:08.963 に答える
0

これはデフォルト値です。テンプレート引数が指定されていない場合は、デフォルトが使用されます。
関数にデフォルト値があるのと同じように:

void blah(int a = 0) { }
于 2012-10-21T15:08:16.067 に答える
0

ご存知のように、C++ 関数の引数にはデフォルト値を設定できます。ユーザーがそのパラメータを指定しない場合、C++ コンパイラはそのデフォルト値を使用します。現在、コンストラクターには、デフォルトのコンストラクターを使用した型の値を意味するデフォルト値initがあります。この構文を他のパラメーターに使用することもできます。T()T=intT()0std::string

explicit matrix(
    unsigned int rows = unsigned int(),
    unsigned int cols = unsigned int(),
    T init = T());
于 2012-10-21T15:10:17.163 に答える