一些历史: 我原本想在ASIO中使用boost,但后来发现ASIO不适用于VC ++ 6.0(这是一项要求)。在结合使用boost时,我发现了Multi_Index_Container和Signals的使用。在发现ASIO不兼容之后,我将升级降级到版本1.34.1,以便它支持VC6。现在我正试图解决所有其他编译错误。
起初,我有这个代码和错误: 我正在尝试使用构建1.34.1中的Boost Multi_Index来设置a 结构的集合。此多索引容器将具有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;
稍后,我试图为这两个键设置指示,据说 用于绕过Get / Tag问题的VC ++ 6.0编译器特定语法:
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;
现在我在其中一个提升类中出现了另一个错误: lambda_traits.hpp。我没有明确使用lambda_traits,所以它一定是 正在使用它的multi_index。这是错误和位置:
C2039:'access_traits':不是'元组'的成员
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 };
任何人都有任何想法如何通过这个最新的错误?
答案 0 :(得分:0)
我记得,模板解析在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;
};