通过继承代理std::函数

Proxying std::function via inheritance

本文关键字:函数 std 代理 继承      更新时间:2023-10-16

如果我正在与更新接口的应用程序(源不可用),我处理的原始函数指针可能是无效的(指向不正确的函数)/null。我想创建一个继承std::function的类,该类将重载operator(),并在调用该类时向stdout发送消息,然后调用原始函数指针。这样做可以很容易地隔离哪个函数会因为null调用而崩溃。我不担心开销,因为只有使用_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;
};

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

相关文章: