Вариадические шаблоны и динамическое кастинг

У меня есть кусок Си++ кода, который выглядит следующим образом:

template <typename ...A> 
struct CastAll{
  template <typename ...B>
  void cast_all(void(*fun)(B...), A...as){
    //...
  }
};

Хотелось бы реализовать cast_all таким образом, чтобы он динамически приводил каждый свой аргумент к соответствующему типу в B, а затем вызывал данную функцию забавно с "кастированными" аргументами.

Например, in:

struct A{};

struct B : public A{};

void foo(B *b1, B *b2){
  //... does something with b1 and b2
}

int main(){

  A *a1 = new B();
  A *a2 = new B();

  CastAll<B*, B*> cast; //used to cast each A* to B*
  cast.cast_all<B*, B*>(foo, a1, a2);
}

cast_all должна расширяться до чего-то вроде: foo(dynamic_cast(a1), dynamic_cast(a2));

Я просмотрел много статей о вариадических шаблонах. Однако через пару часов я все равно не смог разобраться.

Есть идеи?

7
задан ildjarn 7 September 2011 в 22:26
поделиться