带有函数指针的c++模板回调
c++ template callbacks with function pointer
我想知道是否有可能在不引发错误的情况下实现这样的目标:
#include <iostream>
template<typename T>
T Sum(T _arg, T (*callbackFunction)(T))
{
T result = (*callbackFunction)(_arg);
return result;
}
template<typename T>
T Callback(T _arg)
{
std::cout << "Callback is called" << std::endl;
return _arg;
}
int main()
{
std::cout << Sum(10.2f, Callback);
getchar();
return 0;
}
这就是我得到的:
cannot use function template 'T Callback(T)' as a function argument
could not deduce template argument for 'T' from 'float'
不能将函数模板作为参数传递,必须传递实例化,例如:
在Coliru上直播
#include <iostream>
template<typename T, typename F>
T Sum(T arg, F f)
{
return f(arg);
}
template<typename T>
T Callback(T arg)
{
std::cout << "Callback is called" << std::endl;
return arg;
}
auto Callback2 = [](auto arg)
{
std::cout << "Callback2, a generic lambda, is called" << std::endl;
return arg;
};
int main()
{
std::cout << Sum(10.2f, Callback<float>) << std::endl;
std::cout << Sum(10.2f, Callback2) << std::endl;
std::cout << Sum(10.2f, [](auto arg) {
std::cout << "An in-place generic lambda is called" << std::endl;
return arg;
}) << std::endl;
getchar();
return 0;
}
#include <functional>
#include <iostream>
template<typename T>
T Sum(T _arg, std::function<T(T)> callbackFunction) // Note the std::function replacement and how callbackFunction is called below
{
T result = callbackFunction(_arg);
return result;
}
template<typename T>
T Callback(T _arg)
{
std::cout << "Callback is called" << std::endl;
return _arg;
}
int main()
{
std::cout << Sum(10.2f, Callback);
getchar();
return 0;
}
这应该行得通。这段代码是标准的C++11,您应该在编译命令中启用它。
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在C++中实现回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数