Оберните указатель функции в C ++ с вариационным шаблономC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Оберните указатель функции в C ++ с вариационным шаблоном

Сообщение Anonymous »

Вопрос

У меня есть ряд функций 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»