我正在尝试使用助推::绑定和助推::工厂,但没有成功。
我有这个类Zambas,有4个参数(2个字符串和2个int),并且
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]]’
我做错什么了?
发布于 2011-03-16 23:10:04
bind函数返回一个双参数函式,因为您将构造函数的第三个和第四个参数绑定到占位符值_1和_2。但是,您将结果存储在一个零参数function对象中。
我发现六年前的参考资料解释说,绑定函数时不能忽略参数,即使它们是用默认值声明的。
我想你有三个选择:
bind而不是占位符时提供实际的bind值。f的声明,以指示它存储一个双参数函数,然后在调用它时始终提供两个值。f之前将值赋给这些变量。最后一个选项可能只会使您的代码更难阅读,而不会有太大的好处,所以最好选择前两个选项中的一个。
https://stackoverflow.com/questions/5331385
复制相似问题