-1

mapaであるa のインデックスと、std::wstringまた a であるその値を、引数としてstd::wstring3 を取るメンバー関数に渡す必要があります。以下のコード例に示すように、メソッドでstd::wstringsを使用しようとしています..boost::bindwriteclass Result

コードをより明確に再投稿していますが、コンパイル エラーが発生しています。

    typedef std::map<std::wstring,std::wstring> map_type;

    class Print
    {
    public:
       Print(){};
       virtual ~Print(){};
       void setValue(const std::wstring & str1, const std::wstring & str2,
                const std::wstring & str3 = L"")
       {
          wprintf(L"String1[%ls] String2[%ls] String3[%ls]\n",str1.c_str(), str2.c_str(), str3.c_str());
       }
    };

    class Result : public Print
    {
       public:
       Result(){};
       virtual ~Result(){};
       void write(const std::wstring val1, const std::wstring val2, const std::wstring val3)
       {      
          std::map<std::wstring,std::wstring> my_map_test;
          my_map_test[L"Idx1"]=L"Value1";
          my_map_test[L"Idx2"]=L"Value2";         

          for_each(my_map_test.begin(), my_map_test.end(),
          boost::bind(&Result::setValue,
             boost::bind(&map_type::value_type::first,_1),
             boost::bind(&map_type::value_type::second,_1), L"TEST"));
       }
    };

int _tmain(int argc, _TCHAR* argv[])
{
   Result result;
   result.write();
   return 0;
}

ありがとう。

4

2 に答える 2

0

あなたのtypedefやり方は正しくないようです。それ以外は、ネストされた各bind()式の後に括弧がないようです。メンバー関数のようですData::setValue。つまり、適用するオブジェクトも指定する必要があります。つまり、次のように使用したいと思います。

std::for_each(mem_ptr->properties.m_properties_map.begin(),
              mem_ptr->properties.m_properties_map.end(), 
              boost::bind(&Data::setValue,
                          boost::ref(object), 
                          boost::bind(&map_type::value_type::first, _1),
                          boost::bind(&map_type::value_type::second, _1),
                          L"Str"));

˙ 残念ながら、部分的なコードしか提供されていないため、これが実際に機能するかどうかをテストすることはできません。それ以外の場合は、構成を使用してペアを拡張することは興味深いアイデアです。firstsecondもメンバー (のstd::pair<K, V>) ですが、これらのメンバーは、1 つのパラメーター、つまりそれらが呼び出されるオブジェクトを使用して「呼び出す」ことができることに注意してください。データメンバーbind()の場合、値に対応してアクセスするために呼び出すことができるふりをします

于 2012-09-21T23:32:20.540 に答える
0

再度テストした後、動作するようになりました.boost::bindの使用中に欠落していた唯一のパラメーターは、以下に示すように「this」ポインターでした

for_all(my_map_test, boost::bind(&Result::setValue, this , boost::bind(&map_type::value_type::first,_1), boost::bind(&map_type::value_type::second,_1), L"テスト"));

于 2012-09-23T13:50:10.180 に答える