通过继承代理std::函数
Proxying std::function via inheritance
如果我正在与更新接口的应用程序(源不可用),我处理的原始函数指针可能是无效的(指向不正确的函数)/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;
};
对于一个快速而肮脏的实现,我认为是可行的。
相关文章:
- 无法引用该函数" std:: variant <_Types...> operator =",因为此函数已被删除
- 错误:使用已删除的函数"std::unique_ptr<...>
- 我有模板功能.通过使用函数std::for_each,用这个容器中的最大数字替换每个正数
- 如何使用函数std::min()来计算最小值
- 删除了 g++ 在 linux 中basic_stringstream函数 std
- 如何在 c++ 中使用返回类型导出函数 std::map
- 错误:使用已删除的函数"std::atomic<_Tp>::atomic() [_Tp = node]"
- 使用 SFINAE 检查函数 std::to_string 是否存在类型
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 为什么函数 std::basic_streambuf::setg() 需要非常量 agruments
- C++将已删除的函数 std::unique_ptr 与基类一起使用
- 奇怪的错误:当没有真正创建指针时,使用已删除的函数'std::unique_ptr<_Tp,_Dp>::unique_ptr
- 通过模板构造函数(std ::功能和迷你案例)将构造函数触发
- 错误:使用已删除的函数"std::atomic<_Tp>::atomic()
- 错误:使用已删除的函数std::basic_ofstream(OpenCV和C++11)
- 类成员容器迭代器在成员函数std::find中不兼容,但为什么不兼容呢
- 没有构造函数 std::istream_iterator 的实例
- 错误:没有与参数列表匹配的重载函数"std::make_shared"实例
- 错误:使用已删除的函数"std::thread::thread(const std::thread&)"
- 不能在没有对象的情况下调用成员函数 std::string class::function()