2012-03-23 56 views
3

例如,這是boost::tuple如何聲明可變數量的模板參數?

// - tuple forward declaration ----------------------------------------------- 
template < 
    class T0 = null_type, class T1 = null_type, class T2 = null_type, 
    class T3 = null_type, class T4 = null_type, class T5 = null_type, 
    class T6 = null_type, class T7 = null_type, class T8 = null_type, 
    class T9 = null_type> 
class tuple; 

申報正如預期的那樣,我收到以下錯誤,如果我嘗試使用更多的參數

$ g++ vec.cc 
vec.cc: In function 'int main()': 
vec.cc:6: error: wrong number of template arguments (12, should be 10) 
/usr/include/boost/tuple/detail/tuple_basic.hpp:75: error: provided for 'template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> class boost::tuples::tuple' 
vec.cc:6: error: template argument 1 is invalid 
vec.cc:6: error: template argument 2 is invalid 
vec.cc:6: error: invalid type in declaration before ';' token 
$ 

數量是否有將類聲明的方式以便它接受任意數量的模板參數?

+1

http://en.wikipedia.org/wiki/C%2B%2B11#Variadic_templates – leftaroundabout 2012-03-23 13:18:25

+0

你的意思是說,它的行爲就像是一個C++ 11 std :: tuple? – juanchopanza 2012-03-23 13:19:23

+0

@juanchopanza:...像一個支持可變參數模板的系統中的C++ 11元組意味着什麼?例如VS 2011不支持可變參數模板,我認爲*只要無限大於5,元組就支持無限類型。 – 2012-03-23 13:31:20

回答

3

C++ 11支持variadic templates。這些允許你寫:

template<typename ...Args> 
class tuple 
{ 
    // ... 
}; 

但是,沒有簡單的方法來迭代可變參數模板的參數。有關此問題的幾種解決方法,請參閱鏈接的文章。

+0

如果你想迭代它,你總是可以將可變參數包轉換爲MPL序列。 – mark 2012-03-23 17:54:46