Можно ли расширить невариатические аргументы в шаблонной функции? - PullRequest
0 голосов
/ 21 мая 2018

Вероятно, проще объяснить, что я имею в виду на примере.Представьте себе следующий шаблон:

template <class... Args>
std::tuple<Args...> foo();

Он может быть вызван, например, следующим образом:

auto ret = foo<int, bool>();

Но что, если я хочу передать дополнительные аргументы функции, основываясь наколичество аргументов шаблона переменной?Например, допустим, я хочу передать символьный строковый литерал для каждого аргумента:

auto ret = foo<int, bool>("a", "b");

Проблема в том, что не представляется возможным расширить невариантные аргументы, поэтому следующее очевидно неt compile:

template <class... Args>
std::tuple<Args...> foo(const char*... names);

Есть ли какой-нибудь разумный способ реализовать это?

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете сделать это с помощью чего-то вроде

template <class... Args>
std::tuple<Args...> foo(proxy<Args, const char*>... names);

, где proxy равно

template<class T, class E>
using proxy = E;

Вы можете увидеть это в действии здесь: https://godbolt.org/g/SHBYzy

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