кортеж как аргумент функции - PullRequest
0 голосов
/ 05 января 2012

Я немного запутался, если это возможно, как использовать переменный кортеж в качестве аргумента в функции и как его инициализировать.

    template <typename T, Arg ...> 
      void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...

foo(TupleTest(2, "TEST", 5.5));

Как это можно реализовать с помощью c ++ 0x?

Ответы [ 2 ]

7 голосов
/ 05 января 2012

Вам не нужно получать количество аргументов шаблона.Просто сделайте это:

template <typename... T>
void foo(int a, std::tuple<T...> TupleTest);

// make_tuple so we don't need to enter all the type names
foo(0, std::make_tuple(2, "TEST", 5.5));
0 голосов
/ 05 января 2012

Что вы хотите sizeof для?Просто используйте расширение variadic:

template <typename T, typename Arg ...> 
void foo(int a, std::tuple<T, Arg...> TupleTest);

И здесь TupleTest - это имя аргумента , а не имя типа.Поэтому при вызове метода не используйте его.

foo(42, std::tuple<int, char const*, double>(2, "TEST", 5.5));

Наконец, аргумент типа T не имеет смысла (если вы явно не хотите запретить пустой список шаблонов), поэтому вы можете просто удалитьэто без потерь.

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