簡體   English   中英

奇怪的類型名稱和模板中的構造函數

[英]Strange typenames and constructor in a template

我試圖理解C ++中的模板類。 首先,我想了解這條線的含義:

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

其中columns和allocator分別是一個struct和一個在其他地方定義的類(名稱空間abc中的第二個)。 令我感到困擾的是,它似乎有一個已經初始化的類型名稱。 這是什么意思? 我想在使用此模板時是否還要初始化Ord和All的類型名稱?

此外,還有這個唯一的構造函數:

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

但它似乎已經初始化了。 什么應該是什么意思?

我向你們保證,我查看了所有代碼,但沒有什么能夠幫助我們更好地理解。 感謝您的關注。

編輯:謝謝大家的回答。 只是一點點保證(我是C ++中的菜鳥):

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

這個方法意味着,當我們初始化類foo時,我們可以通過foo()(1,2)調用它,其中i = 1且j = 2。 我對嗎? 那兩個“const”是指什么?

再次感謝你!

這意味着該類的用戶在設置合理的默認值- ,你可以提供一個,但你不必 構造函數參數也是如此。 至於論證的含義,只有你能回答這個問題。

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

這是默認值。 如果未指定template參數,則采用默認值。
就像你在函數中有默認值一樣:

void blah(int a = 0) { }

如您所知,在C ++函數中,參數可以具有默認值,並且如果用戶不提供該參數,則C ++編譯器會使用該默認值。 現在在構造函數init有一個默認值T() ,這意味着使用默認構造函數的類型的值,例如,如果T=intT()表示0 ,如果它是std::string ,則它是一個空字符串。 您甚至可以將此語法用於其他參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM