Glib 变体元组反序列化

Glib Variant Tuple Deserialization

提问人:Ashok 提问时间:10/8/2023 最后编辑:Ashok 更新时间:10/8/2023 访问量:20

问:

我正在尝试在元组下方反序列化,但在获取内部向量变体时遇到问题。 检索了初始 2 个值,但向量变体给我带来了一些麻烦,我无法理解为什么它不起作用

Glib::Variant < std::tuple < std::uint32_t, // First unsigned integer
  std::uint32_t, // First unsigned integer
  std::vector < // Array of dictionaries
  std::tuple < std::uint32_t, // Inner unsigned integer
  std::int32_t, // Inner unsigned integer
  std::vector < // Array of dictionaries
  std::map < Glib::ustring, // Dictionary key (string)
  Glib::VariantBase // Dictionary value (variant)
  >
  > > > , std::vector < // Array of dictionaries
  std::map < Glib::ustring, // Dictionary key (string)
  Glib::VariantBase // Dictionary value (variant)
  >
  > > > response_variant;

//here is my de - serialization code:

  Glib::Variant < std::uint32_t > firstVariant;
Glib::Variant < std::uint32_t > secondVariant;

call_result.get_child(firstVariant, 0);
std::uint32_t first_value = firstVariant.get();
std::cout << "fist_value: " << first_value << std::endl;

call_result.get_child(secondVariant, 1);
std::uint32_t second_value = secondVariant.get();
std::cout << "second_value: " << second_value << std::endl;

Glib::Variant <
  std::vector <
  std::tuple < std::uint32_t, std::int32_t,
  std::vector <
  std::map < Glib::ustring,
  Glib::VariantBase >> > >
  >
  thirdVariant;

call_result.get_child(thirdVariant, 2);

// Check if the variant is an array
if (thirdVariant.get_type_string() == "a(uia{sv})") {

  std::size_t innerTupleCount = thirdVariant.get_n_children();
  std::cout << "innerTupleCount: " << innerTupleCount << std::endl;
  Glib::Variant < std::tuple < std::uint32_t, std::int32_t, std::vector < std::map < Glib::ustring, Glib::VariantBase >>> > baseVariant;

  for (std::size_t i = 0; i < innerTupleCount; ++i) {

    Glib::Variant < std::tuple < std::uint32_t, std::int32_t, std::vector < std::map < Glib::ustring, Glib::VariantBase >>> > tupleVariant;
    //thirdVariant.get_child(tupleVariant, i); //compilation error no matching function for call
    //tupleVariant = thirdVariant.get_child(i); //Compilation error no match for 'operator='
  }
} else {
  std::cerr << "Unexpected variant type: " << thirdVariant.get_type_string() << std::endl;
}

我能够获得 vector 的子项数,但是当我尝试检索元组代码时,给我编译错误。可能是我无法理解这里的对象!

我尝试在下面做,但遇到编译错误:

 //thirdVariant.get_child(tupleVariant, i); //compilation error no matching function for call
    //tupleVariant = thirdVariant.get_child(i); //Compilation error no match for 'operator='

寻求帮助,提前致谢。

我尝试了多种方法,但没有任何效果

 //thirdVariant.get_child(tupleVariant, i); //compilation error no matching function for call
    //tupleVariant = thirdVariant.get_child(i); //Compilation error no match for 'operator='
C++ glib 变体 stdtuple

评论


答: 暂无答案