У меня есть boost::variant
, который содержит различные типы, и у меня есть строка, которая должна выглядеть следующим образом: type = D, S .Значения в варианте - D и S соответственно, ключ - «тип».Это map<std::string, std::vector<variant> >
, где я сейчас перебираю vector<variant>
part
. Теперь я сначала применяю 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 в части значения моей исходной пары ключ / значение?