C++ 通过继承代理std::函数

C++ 通过继承代理std::函数,c++,pointers,stl,function-pointers,std-function,C++,Pointers,Stl,Function Pointers,Std Function,我处理的是原始函数指针,如果应用程序源不可用,则指向错误函数的指针可能无效/null。我正在与更新交互。我想创建一个继承std::function的类,该类将重载运算符,并在调用该类时向stdout发送消息,然后调用原始函数指针。这样做的目的是,我可以很容易地隔离哪个函数会因为空调用而崩溃。我不担心开销,因为只有使用_Debug才能在调试模式下使用 因为STL实现取决于编译器,从中继承通常是一个坏主意,我不确定如何做到这一点。我使用的编译器是MSVC 2015 我该怎么做 template &l

我处理的是原始函数指针,如果应用程序源不可用,则指向错误函数的指针可能无效/null。我正在与更新交互。我想创建一个继承std::function的类,该类将重载运算符,并在调用该类时向stdout发送消息,然后调用原始函数指针。这样做的目的是,我可以很容易地隔离哪个函数会因为空调用而崩溃。我不担心开销,因为只有使用_Debug才能在调试模式下使用

因为STL实现取决于编译器,从中继承通常是一个坏主意,我不确定如何做到这一点。我使用的编译器是MSVC 2015

我该怎么做

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

对于一个快速而肮脏的实现,我认为是可行的。

那么为什么不编写一个包装器呢?因为在发布模式下,我希望它是原始的std::函数,编写一个包装器需要我实现std::函数拥有的所有函数。例如:ifdef_使用FunctionPointer=DebugFunction进行调试;使用FunctionPointer=std::function的else;如果要返回funstd::forwardargs。。。;完美的转发。