我正在努力尝试将boost :: bind与boost :: factory
一起使用我有这个类Zambas有4个参数(2个字符串和2个整数)和
class Zambas {
public:
Zambas(const std::string&, const std::string&,int z1=0,int z2=0) {
if (z1==z2){
}
}
};
在其他方法中,我有以下调用
boost::function<Zambas*()> f(boost::bind(boost::factory<Zambas*>(), std::string(""), std::string(""),_1,_2));
因以下编译器错误而失败:
bind.hpp:382: error: no match for ‘operator[]’ in ‘a[boost::_bi::storage3<A1, A2, boost::arg<I> >::a3_ [with A1 = boost::_bi::value<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, A2 = boost::_bi::value<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, int I = 1]]’
我做错了什么?
答案 0 :(得分:1)
bind
函数返回一个双参数仿函数,因为您将构造函数的第三个和第四个参数绑定到占位符值_1
和_2
。但是,您将结果存储在零参数function
对象中。
我发现a reference from six years ago解释了绑定函数时无法省略参数,即使它们是使用默认值声明。
我认为你有三种选择:
int
而非占位符时提供实际bind
值。f
的声明以指示它存储双参数函数,然后在调用它时始终提供这两个值。f
之前为这些变量指定值。最后一个选项可能只是让您的代码更难以阅读而没有太大的好处,所以更喜欢前两个选项中的一个。