gpt4 book ai didi

c++ - 如何制作适用于 gcc 4.6 的递归 boost::variant?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:20 25 4
gpt4 key购买 nike

我正在解码 bencode,并且有一些代码适用于 gcc 4.4。但是最近升级到 gcc 4.6 后,此代码不再生成:

#ifndef BENCODE_VALUETYPES_H
#define BENCODE_VALUETYPES_H

#include <boost/variant.hpp>

#include <string>
#include <vector>
#include <map>

namespace bencode {

typedef boost::make_recursive_variant<
int,
std::string,
std::vector<boost::recursive_variant_>,
std::map<std::string, boost::recursive_variant_> >::type Value;

typedef std::map<std::string, Value> ValueDictionary;
typedef std::vector<Value> ValueVector;

};

#endif

g++ 给出了这个错误信息:

/usr/include/c++/4.6/bits/stl_pair.h: In instantiation of 'std::pair<const std::basic_string<char>, boost::recursive_variant_>':
Decoder.cpp:97:39: instantiated from here
/usr/include/c++/4.6/bits/stl_pair.h:93:11: error: 'std::pair<_T1, _T2>::second' has incomplete type
/usr/include/boost/variant/variant_fwd.hpp:232:12: error: forward declaration of 'struct boost::recursive_variant_'

documentation对于最新的 boost 版本(目前为 1.48)声明“由于几个编译器中的标准一致性问题,make_recursive_variant 未得到普遍支持”,您应该改用 recursive_wrapper。但是我在进行更改时遇到了问题:有人知道使用包装器应该是什么样子吗?

最佳答案

在包含 boost 变体头文件之前,尝试在头文件中定义以下内容。

#define BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
#include <boost/variant.hpp>

我遇到了同样的问题并在 boost variant recursive 找到了解决方案

关于c++ - 如何制作适用于 gcc 4.6 的递归 boost::variant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com