Проксирование 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;
};

Для быстрой и грязной реализации, я думаю, будет работать.

Другие вопросы по тегам