我一直在嘗試使用模板一段時間,我越做越少,我意識到我理解。這個最新的問題讓我覺得它已經發現了一個相當根本的誤解,我開始比以往更多地思考,「對,明天我不應該寫任何代碼,而是找一個CS部分很好的庫,閱讀模板上的所有內容「!我想知道在同一時間你能幫助我。'typename`參數化模板和積分類型之間的差異
所以,下面的代碼,
template <typename T> // or replace `typename` with `class`
struct Foo {
struct Bar {};
Foo(Bar) {}
};
Foo<float>::Bar x;
Foo<int> y (x);
不能編譯,因爲x
是Foo<float>::Bar
類型,但構建y
我們需要一個Foo<int>::Bar
。這很好,和預期,但現在考慮下面,
template <int I>
struct Foo {
struct Bar {};
Foo(Bar) {}
};
Foo<0>::Bar x;
Foo<1> y (x);
我希望/思(雖然,謝天謝地,還未依靠),其x
將Foo<0>::Bar
型和構建y
我們需要一個Foo<1>::Bar
,因此它不會編譯 - 如前例所示。但似乎兩者其實都是Foo<int>::Bar
這樣的類型,所以會編譯成。
所以,我想知道,首先是描述typename/class參數化模板和參數化整型參數化模板之間這種區別的正確術語,還有其他什麼不同之處呢?用來解決這個問題,並獲得這個簡單的例子所需的行爲,以便Foo<0>
和Foo<1>
將描述不兼容的類型?
而且,在圖書館之旅之前,任何有關「必要」,在線閱讀材料的鏈接都將受到歡迎。 謝謝。
你的後一個例子不能在GCC上編譯。你正在使用哪種編譯器? – Yuji 2010-07-19 21:50:00
你給出的代碼當然不應該編譯,因爲你給出的原因是:'Foo <0>'和'Foo <1>'是不同的類型。你正在使用哪種編譯器? – 2010-07-19 21:50:56
並將此列表帶到您的圖書館:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2010-07-19 21:53:09