gpt4 book ai didi

c++ - 将可调用的 std::function() 重定向到 C++11 之前的自定义处理程序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:20 26 4
gpt4 key购买 nike

我有这样的东西:

typedef std::function<void(int param1, int param2)> TheCallback;

void callTheCallback(TheCallback& theCallback) {
theCallback(1, 2);
}

int main(int argc, char *argv[]) {
TheCallback cb = [](int a, int b) {
std::cout << "Param 1:" << a << ", Param 2:" << b << std::endl;
};

cb(100, 200);
return 0;
}

我的问题是 - Hook std::function(或创建自定义“向后兼容”std::function 模板)的最佳方法是什么,以便每次调用此类函数时它也会打印一些自定义字符串(例如“被叫”)在做其他事情之前?

nice solution for C++11 that uses variadic templates .那么 C++0x(例如 Visual Studio 2010)是否有类似的可能?

最佳答案

我会为这样处理它的回调制作一个包装器:

#include <iostream>     
#include <functional>

typedef std::function<void(int param1, int param2)> TheCallback;

class CallbackWrapper
{
public:
CallbackWrapper(TheCallback callback)
: m_callback(callback)
{}

void startCallback(int a, int b)
{
std::cout << "Called" << std::endl;
m_callback(a, b);
}

private:
TheCallback m_callback;
};

int main(int argc, char* argv[])
{
TheCallback cb = [](int a, int b) {
std::cout << "Param 1:" << a << ", Param 2:" << b << std::endl;
};

CallbackWrapper testCallback(cb);

testCallback.startCallback(11, 22);

return system("pause");
}

你甚至可以省略本地 cb:

int main(int argc, char* argv[])
{
CallbackWrapper testCallback([](int a, int b) {
std::cout << "Param 1:" << a << ", Param 2:" << b << std::endl;
});

testCallback.startCallback(11, 22);

return system("pause");
}

关于c++ - 将可调用的 std::function() 重定向到 C++11 之前的自定义处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com