Проксирование std::function через наследование
Я имею дело с необработанными указателями на функции, которые могут быть недопустимыми (указывать на неправильную функцию) / нулевыми, если приложение (источник недоступен) взаимодействует с обновлениями. Я хочу создать класс, который наследовал бы std::function, который бы перегружал operator() и отправлял сообщение stdout при каждом вызове класса, а затем вызывал исходный указатель на функцию. Это будет сделано для того, чтобы я мог легко определить, какая функция потерпит крах из-за нулевого вызова. Я не беспокоюсь о накладных расходах, так как это будет доступно в режиме отладки только с использованием _DEBUG
Поскольку реализация STL зависит от компилятора и наследование от него, как правило, является плохой идеей, я не уверен, как это сделать. Я использую компилятор MSVC (2015).
Как бы я это сделал?
1 ответ
template < typename Signature >
struct function_decorator
{
template < typename Fun >
function_decorator(Fun f)
: fun(f)
{}
template < typename ... Pack >
auto operator()(Pack ... args) const
{
return fun(std::forward<Pack>(args)...);
}
private:
std::function<Signature> fun;
};
Для быстрой и грязной реализации, я думаю, будет работать.