gpt4 book ai didi

c++ - boost::bind、boost::function 和 boost::factory 的问题

转载 作者:太空狗 更新时间:2023-10-29 23:09:23 30 4
gpt4 key购买 nike

我尝试将 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]]’

我做错了什么?

最佳答案

bind 函数返回一个双参数仿函数,因为您将构造函数的第三个和第四个参数绑定(bind)到占位符值 _1_2。但是,您将结果存储在零参数 function 对象中。

我找到了 a reference from six years ago解释在绑定(bind)函数时不能省略参数,即使它们是使用默认值声明的

我认为你有三个选择:

  1. 在调用 bind 时提供实际的 int 值,而不是占位符。
  2. 更改 f 的声明以指示它存储一个双参数函数,然后在调用它时始终提供两个值。
  3. 将最后两个参数绑定(bind)到变量。参见 Delaying constants and variables在 Boost.Lambda 文档中。然后,您可以将这些变量设置为与构造函数声明的相同的默认值。要使用默认值,什么都不做。要指定非默认值,请在调用 f 之前为这些变量赋值。

最后一个选项可能只会让您的代码更难阅读而没有太大好处,因此请改用前两个选项之一。

关于c++ - boost::bind、boost::function 和 boost::factory 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331385/

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