variadic templates и "разворот" в типы посредники
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.01.12 11:44
Оценка:
всем привет.

всем привет.

к примеру, имеется у нас следующая функция:
template<typename... Args>
void func(const Args&... args) {}

используем мы ее как обычно:
func(1);
func(1,2);

тут проблем нет.

теперь давайте представим, что эта функция на самом деле декларирована так:
void func(ArgWrapper a0 = ArgWrapper(0,0), ArgWrapper a1 = ArgWrapper(0,0), ArgWrapper a2 = ArgWrapper(0,0), и т.д....) {}

а мы хотим ее использовать так:
struct type {
   template<typename... Args>
   static void method(const Args&... args) {
      func(args...); // тут как записать?
   }
};


т.е. проблема в том, что функция не моя, а мне нужно под нее подстраиваться.
вторая проблема в том, что у функции каждый аргумент (ArgWrapper) получает два значения которые описывают один аргумент.

в общем, последний пример, для ясности должен компилятором генерироваться так:
struct type {
   template<typename... Args>
   static void method(const Args&... args) {
      func(
         ArgWrapper(typeid(args[0]).name(), args[0]),
         ArgWrapper(typeid(args[1]).name(), args[1]),
         ArgWrapper(typeid(args[2]).name(), args[2])
      );
   }
};


не знаю как еще объяснить..

всем благодарен.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.