簡體   English   中英

boost :: bind,boost :: function和boost :: factory的問題

[英]Problem with boost::bind, boost::function and boost::factory

我正在嘗試使用boost :: factory的boost :: bind而沒有成功

我有這個類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函數返回一個雙參數仿函數,因為您將構造函數的第三個和第四個參數綁定到占位符值_1_2 但是,您將結果存儲在零參數function對象中。

我發現六年前的一個引用解釋了綁定函數時不能省略參數, 即使它們是用默認值聲明的

我認為你有三個選擇:

  1. 提供了實際int在您的通話值bind ,而不是占位符。
  2. 更改f的聲明以指示它存儲雙參數函數,然后在調用它時始終提供這兩個值。
  3. 將最后兩個參數綁定到變量 請參閱Boost.Lambda文檔中的延遲常量和變量 然后,您可以將這些變量設置為與構造函數聲明的默認值相同的默認值。 要使用默認值,請不要再執行任何操作。 要指定非默認值,請在調用f之前為這些變量賦值。

最后一個選項可能只是讓你的代碼更難以閱讀而沒有太大的好處,所以更喜歡前兩個選項中的一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM