Шаблоны с переменными параметрами: передать пакет параметров без расширения

Старые возможности 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 `...'

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


person Channel72    schedule 09.11.2010    source источник
comment
Насколько мне известно, пакет параметров C ++ 0x не существует сам по себе, это просто обозначение, относящееся к аргументам. И насколько я знаю, единственное, что можно сделать, это расширить его. Поскольку это во время компиляции, по-видимому, это не имеет особых накладных расходов и, следовательно, не является проблемой.   -  person Cheers and hth. - Alf    schedule 09.11.2010
comment
Я думаю, вам нужно указать аргументы ... чтобы передать их.   -  person David    schedule 09.11.2010
comment
ха-ха, спасибо за вопрос, я думал сделать то же самое, но комментарий сэра @Alf открыл мне глаза :)   -  person Mr.Anubis    schedule 04.02.2012


Ответы (1)


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

person icecrime    schedule 09.11.2010