我有從C++機庫(DLIB),看起來像這樣一類的內部一個typedef:動態的typedef
typedef dlib::matrix<double, 64, 1> sample_type;
除64實際上是一個變量。我希望typedef在整個類中都可見,但是我希望第二個參數(64)在構造函數被調用時作爲參數。我怎樣才能做到這一點,同時保持typedef在任何地方都可見?
我有從C++機庫(DLIB),看起來像這樣一類的內部一個typedef:動態的typedef
typedef dlib::matrix<double, 64, 1> sample_type;
除64實際上是一個變量。我希望typedef在整個類中都可見,但是我希望第二個參數(64)在構造函數被調用時作爲參數。我怎樣才能做到這一點,同時保持typedef在任何地方都可見?
作爲一般情況下,這是不可能的。雖然您可能想要寫下列內容:
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的數據字段內部進行了定義。第一個數據字段將使用當前實例化參數創建。第二個數據字段將使用顯式參數創建。如你所見,模板內部似乎是你想要的,但只有常量纔可以使用。
對於當前的設計,這是不可能的,因爲在編譯時模板參數必須是而構造函數的參數沒有這個限制。
原因是因爲任何模板擴展都應該看作是它自己的類型;模板參數是類型的一部分(std::vector<int>
是與std::vector<float>
不同的類型)。
這實際上是dlib網頁上的frequently asked questions之一。你做的是這樣的:
typedef dlib::matrix<double, 0, 1> sample_type;
sample_type myvect(64); // now the 64 is a runtime argument.
那麼,你不能。 –
要擴展@ R.MartinhoFernandes的評論:模板擴展發生在編譯時,所以模板參數必須是編譯時已知的常量。 –
爲什麼不只是做一個幫手功能? – dcousens