У меня есть ряд функций c ++ void f () , r g (t a) , s h (u a, v b) и так далее. Я хочу написать функцию шаблона, которая принимает f , g , h и так далее как аргумент шаблон и вызывает эту функцию.
Код: Выделить всё
template
ReturnType wrapper(MagicallyCorrectParams... params)
{
extra_processing(); // Extra stuff that the wrapper adds
return WrappedFunction(params);
}
...
wrapper(); // calls f
wrapper(T()); // calls g
wrapper(U(), V()); // calls h
< /code>
Вот что я пробовал до сих пор: < /h1>
Решение 1 < /h2>
template
ReturnType wrapper(ReturnType (*wrappee)(Args...), Args... args)
{
extra_processing();
return wrappee(args...);
}
...
wrapper(f); // calls f OK
wrapper(g, T()); // calls g OK
wrapper(h, U(), V()); // calls h OK
< /code>
Это работает, но является неудовлетворительным, потому что в моем случае я хочу, чтобы указатель функции был связан с экземпляром шаблона. Указатель функции определяется статически во время компиляции, и в моем случае использование нежелательно передать его в качестве параметра во время выполнения.template<
typename ReturnType, typename Args...,
ReturnType (*FuncPtr)(Args...)
>
wrapper(Args... args)
{
extra_processing();
return FuncPtr(args...);
}
...
wrapper(); // calls f
wrapper(T()); // calls g
wrapper(U(), V()); // calls h
< /code>
Это работает, но является неудовлетворительным, потому что это словесно. Тип возврата и типы параметров могут быть выведены из самого указателя функции. Что было бы идеальным, так это спецификация шаблона, поэтому я могу сделать обертку (t ()) Спасибо за помощь!
Подробнее здесь: https://stackoverflow.com/questions/253 ... c-template