2013-10-27 3 views
3

Как создать объект с членом типа std::tuple?std :: tuple as class member

Я попытался скомпилировать этот код.

6 template <class ... T> 
    7 class Iterator 
    8 { 
    9 public: 
10   Iterator(T ... args) 
11     : tuple_(std::make_tuple(args)) 
12   { 
13   } 
14 
15 private: 
16   std::tuple<T ...> tuple_; 
17 }; 

Но он не может скомпилировать следующую ошибку.

variadic.cpp: In constructor ‘Iterator<T>::Iterator(T ...)’: 
variadic.cpp:11:33: error: parameter packs not expanded with ‘...’: 
variadic.cpp:11:33: note:   ‘args’ 

Что не так с кодом?

ответ

10

args является VARIADIC, так что вы должны расширить его ...:

: tuple_(std::make_tuple(args...)) 
//       ^^^ 

И вам не нужно make_tuple для этого:

: tuple_(args...) 
Смежные вопросы