我有一個boost::variant
,它包含各種類型,我有一個字符串需要看起來像這樣:type = D,S。變體中的值分別是D和S,關鍵是'type'。這是一個map<std::string, std::vector<variant> >
在那裏我現在迭代vector<variant>
部分在while循環出錯的情況下連接值
現在我先申請一個static_visitor我的變種做了相應的轉換,在這種情況下可能並不需要,但對於其他類型的就需要轉換成串。
然後我稱這個函數爲ConcatValues
,它是輔助類的一部分。這個類定義了一個vector<string> v_accumulator
來保存臨時結果,因爲這個函數可能會在while循環中多次調用,並且我想以逗號分隔的值列表結束。
但問題是我的矢量v_accumulator
在每個函數調用中總是空的?這是什麼意思,因爲它是一個類變量。
while(variant_values_iterator != values.end())
{
variant var = *variant_values_iterator;
boost::apply_visitor(add_node_value_visitor(boost::bind(&SerializerHelper::ConcatValues, helper, _1, _2), key, result), var);
variant_values_iterator++;
}
std::string SerializerHelper::ConcatValues(std::string str, std::string key)
{
v_accumulator.push_back(str); //the previous value is not in this vector???
std::stringstream ss;
std::vector<std::string>::iterator it = v_accumulator.begin();
ss << key;
ss << "=";
for(;it != v_accumulator.end(); it++)
{
ss << *it;
if (*it == v_accumulator.back())
break;
ss << ",";
}
return ss.str();
}
class SerializerHelper
{
public:
std::string ConcatValues(std::string str, std::string key);
private:
std::vector<std::string> v_accumulator;
};
也許有是連接在我原來的鍵/值對的值部分d,S的值更簡單的方法?
1,或者,可以通過指針的結合成員功能的情況下通過的第一個參數。 'bind'模板會正確處理它:'boost :: bind(&SerializerHelper :: ConcatValues,&helper,_1,_2)'。 – 2010-12-15 10:30:48