2012-06-23 23 views
1

我有從C++機庫(DLIB),看起來像這樣一類的內部一個typedef:動態的typedef

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

除64實際上是一個變量。我希望typedef在整個類中都可見,但是我希望第二個參數(64)在構造函數被調用時作爲參數。我怎樣才能做到這一點,同時保持typedef在任何地方都可見?

+4

那麼,你不能。 –

+0

要擴展@ R.MartinhoFernandes的評論:模板擴展發生在編譯時,所以模板參數必須是編譯時已知的常量。 –

+0

爲什麼不只是做一個幫手功能? – dcousens

回答

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

對於當前的設計,這是不可能的,因爲在編譯時模板參數必須是而構造函數的參數沒有這個限制。

原因是因爲任何模板擴展都應該看作是它自己的類型;模板參數是類型的一部分(std::vector<int>是與std::vector<float>不同的類型)。

0

這實際上是dlib網頁上的frequently asked questions之一。你做的是這樣的:

typedef dlib::matrix<double, 0, 1> sample_type; 
sample_type myvect(64); // now the 64 is a runtime argument.