Шаблоны Variadic: передать пакет параметров без расширения - PullRequest
4 голосов
/ 09 ноября 2010

Старые средства C stdio обеспечивали способ передачи набора аргументов с использованием vprintf.

Существует ли аналогичный способ передачи пакета параметров шаблона C ++ 0x * без его расширения?

Это может быть полезно, если у вас есть конструктор производного класса, который принимает пакет параметров с переменным шаблоном и ему нужно просто передать его конструктору базового класса, а не распаковывать его.

Например:

template <class T, class... Args>
Base::Base(const T& v, const Args&... args) 
{
  /*...expand args here ....*/
}

template <class T, class... Args>
Derived::Derived(const T& v, const Args&... args) : Base(v, args)
{
  /*...don't expand args...*/
}

Я думал, что вы можете просто обойти пакет параметров args без его расширения, исключив ... после аргументов, но это просто приводит кв ошибке компилятора в GCC 4.3:

 error: parameter packs not expanded with `...'

Так что можно передать пакет параметров без его расширения?

1 Ответ

6 голосов
/ 09 ноября 2010

Я не понимаю, как расширение является проблемой: разве расширенные аргументы не будут просто переупакованы в конструкторе Base?Я полагаю, что использование args... будет работать как ожидалось.

...