У меня есть кусок кода C++ следующим образом:
template <typename ...A>
struct CastAll{
template <typename ...B>
void cast_all(void(*fun)(B...), A...as){
//...
}
};
Что я хотел бы сделать, так это реализовать cast_all таким образом, чтобы он динамически приводил каждый из своих аргументов к соответствующему типу в B, а затем вызывал данную функцию fun с «приведенными» аргументами.
Например, в:
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));
Я просмотрел много статей о вариативных шаблонах. Однако через пару часов я все еще не могу понять это.
Любые идеи?