VC6上具有Boost 1.34.1的Boost类中的错误C2039

| 一些历史: 我最初想对ASIO使用boost,但是后来发现ASIO无法在VC ++ 6.0上运行(这是必需的)。合并boost时,发现可以用于Multi_Index_Container和Signals。在发现ASIO不兼容之后,我将Boost降级到1.34.1版本,以便它支持VC6。现在,我试图消除所有其他编译错误。 一开始,我有以下代码和错误: 我正在尝试使用内部版本1.34.1的Boost Multi_Index来设置 结构的集合。此多索引容器将具有2个唯一键 (ID和名称),因为我必须能够使用任一键进行搜索。一世 对VC ++ 6.0 SP5进行了特定于编译器的更正:
boost::multi_index::multi_index_container
member_offset<A,int,offsetof(A,x)>
我完整的声明是:
enum RESPONSE_CODES
{
    Pass = 200,
    Fail = 201,
    Hex = 202,
    Decimal = 203,
    String = 204,
    Help = 205,
    None = 255
}

struct PDCUTestMessage
{
    string name;
    char id;
    RESPONSE_CODES responseType;
    int numberOfParameters;
    string errorString;
    vector<char> response;
    string param1Name;
    string param2Name;
    string param3Name;
    string param4Name;
    string param5Name;
    boost::function2<bool, vector<char>, PDCUTestMessage &> process;

    // constructors not listed
};

struct ID();
struct Name();

typedef boost::multi_index::multi_index_container<
    PDCUTestMessage,
    boost::multi_index::ordered_unique<
        boost::multi_index::tag<ID>,
        boost::multi_index::member_offset<PDCUTestMessage, char, offsetof(PDCUTestMessage, id)> >,
    boost::multi_index::ordered_unique<
        boost::multi_index::tag<Name>,
        boost::multi_index::member_offset<PDCUTestMessage, string, offsetof(PDCUTestMessage, name)> >
    >
> PDCUMessageList;
后来,我尝试为这两个键设置索引, VC ++ 6.0特定于编译器的语法绕过了Get / Tag问题:
typedef index<PDCUMessageList, ID>::type IDIndex;
typedef index<PDCUMessageList, Name>::type NameIndex;
使用上面的代码,我得到以下错误: 错误C2039:\'type \':不是引用上述两条typedef行的“全局名称空间”的成员。 我通过澄清名称空间来解决此问题:
typedef boost::multi_index::index<PDCUMessageList, ID>::type IDIndex;
typedef boost::multi_index::index<PDCUMessageList, Name>::type NameIndex;
现在,在其中一个boost类中发生了另一个错误: lambda_traits.hpp。我没有明确使用lambda_traits,因此必须 使用它的multi_index。这是错误和位置: C2039:\'access_traits \':不是\'tuples \'的成员 lambda_traits中的第106行:
104  template<int N, class T> struct tuple_element_as_reference {
105    typedef typename
106      boost::tuples::access_traits<
107        typename boost::tuples::element<N, T>::type
108      >::non_const_type type;
109  };
任何人都有任何想法如何克服这个最新的错误?     
已邀请:
我记得在VC6中模板解析很尴尬。 尝试尽可能简化依赖类型。例如:
template<int N, class T> struct tuple_element_as_reference {
  typedef typename boost::tuples::element<N, T>
     tuples_element_t;

  typedef typename tuples_element_t::type
     tuples_element_type_t;

  typedef typename boost::tuples::access_traits<
     tuples_element_type_t
  >
     tuples_access_traits_t;

  typedef typename tuples_access_traits_t::non_const_type
     type;
};
    

要回复问题请先登录注册