Как объявить переменное количество аргументов шаблона? - PullRequest
3 голосов
/ 23 марта 2012

Например, это объявление 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 Ответ

3 голосов
/ 23 марта 2012

C ++ 11 поддерживает переменные шаблоны . Это позволяет вам написать:

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

Тем не менее, не существует простого способа перебора аргументов вариационного шаблона. См. Связанную статью для нескольких обходных путей для этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...