2012-06-29 69 views
2

在C++ 11(或C++)中,是否可以傳遞未完全指定的模板類型。具體而言,我想傳遞一個類型不具有其所有的模板說明符尚未定義:傳遞帶有自由模板參數的模板類型名稱

template <std::size_t N, typename ARRAYTYPE> 
struct A { 
    ARRAYTYPE<int, N> int_array; 
}; 

int main() { 
    A<10, std::array> my_a; 
    return 0; 
} 

我知道,只是重新定義ARRAYTYPE = std::array<int, 10>會工作,但不會讓我在A利用不同大小的ARRAYTYPE任何地方:

template <std::size_t N, typename ARRAYTYPE> 
struct A { 
    ARRAYTYPE<int, N> int_array; 
    ARRAYTYPE<int, 1> tiny_int_array; 
}; 

這可能嗎?

回答

6

這就是所謂的「模板模板參數」,因爲它是一個模板參數,它的值是一個模板:

template <std::size_t N, template <typename, std::size_t> class ARRAYTYPE> 
struct A { 
    ARRAYTYPE<int, N> int_array; 
    ARRAYTYPE<int, 1> tiny_int_array; 
}; 
+0

+1精彩!這節省了很多麻煩。 – user

1

這不會是一個類型,而是一個模板:

template <std::size_t N, template <typename, std::size_t> class ARRAY_TMPL> 
struct A { 
    ARRAY_TMPL<int, N> int_array; 
}; 
+0

我認爲這需要'',否則例如'std :: array'和'boost :: array'不起作用。 – ildjarn

+0

@ildjarn:是的,錯過了。謝謝 –

相關問題