Can I use (boost) bind with a function template?(我可以使用 (boost) 绑定函数模板吗?)
问题描述
是否可以使用 模板>(提升)绑定?
Is it possible to bind arguments to a function template with (boost) bind?
// Define a template function (just a silly example)
template<typename ARG1, typename ARG2>
ARG1 FCall2Templ(ARG1 arg1, ARG2 arg2)
{
return arg1 + arg2;
}
// try to bind this template function (and call it)
...
boost::bind(FCall2Templ<int, int>, 42, 56)(); // This works
boost::bind(FCall2Templ, 42, 56)(); // This emits 5 pages of error messages on VS2005
// beginning with: error C2780:
// 'boost::_bi::bind_t<_bi::dm_result<MT::* ,A1>::type,boost::_mfi::dm<M,T>,_bi::list_av_1<A1>::type>
// boost::bind(M T::* ,A1)' : expects 2 arguments - 3 provided
boost::bind<int>(FCall2Templ, 42, 56)(); // error C2665: 'boost::bind' : none of the 2 overloads could convert all the argument types
想法?
推荐答案
我不这么认为,只是因为 boost::bind
在这种情况下正在寻找一个函数指针,而不是一个函数模板.当您传入 FCall2Templ
时,编译器会实例化该函数并将其作为函数指针传递.
I don't think so, only because boost::bind
in this case is looking for a function pointer, not a function template. When you pass in FCall2Templ<int, int>
, the compiler instantiates the function and it is passed as a function pointer.
但是,您可以使用函子执行以下操作
However, you can do the following using a functor
struct FCall3Templ {
template<typename ARG1, typename ARG2>
ARG1 operator()(ARG1 arg1, ARG2 arg2) {
return arg1+arg2;
}
};
int main() {
boost::bind<int>(FCall3Templ(), 45, 56)();
boost::bind<double>(FCall3Templ(), 45.0, 56.0)();
return 0;
}
您必须指定返回类型,因为返回类型与输入相关.如果返回没有变化,那么你可以在模板中添加typedef T result_type
,这样bind就可以确定结果是什么
You have to specify the return type, since the return type is tied to the inputs. If the return doesn't vary, then you can just add typedef T result_type
to the template, so that bind can determine what the result is
这篇关于我可以使用 (boost) 绑定函数模板吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我可以使用 (boost) 绑定函数模板吗?
基础教程推荐
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07