通过继承代理std :: function

时间:2015-11-07 00:17:26

标签: c++ pointers stl function-pointers std-function

我正在处理可能无效的原始函数指针(指向不正确的函数)/ null如果应用程序(源不可用)我正在与更新连接。我想创建一个继承std :: function的类,它会重载operator()并在调用类时向stdout发送消息,然后调用原始函数指针。这将完成,因此我可以轻松地隔离哪个函数会因为空调用而崩溃。我并不担心开销,因为只有使用_DEBUG

才能在调试模式下使用

因为STL实现取决于编译器并且从它继承通常是一个坏主意我不确定如何执行此操作。我使用的编译器是MSVC(2015)。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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;
};

对于快速而肮脏的实施,我认为可行。