我想定義std::tr1::hash<boost::tuple<A,B,C> >
。但是當我給出完整的即時消息時,我得到一個不會出現的錯誤。下面的代碼在tr1 :: hash中使用boost :: tuple
namespace std{
namespace tr1{
template<typename A, typename B, typename C>
struct hash<boost::tuple<A,B,C> >{
size_t operator()(const boost::tuple<A,B,C> &t) const{
size_t seed = 0;
boost::hash_combine(seed, t.get<0>());
boost::hash_combine(seed, t.get<1>());
boost::hash_combine(seed, t.get<2>());
return seed;
}
};
template<>
struct hash<boost::tuple<int,int,int> >{
size_t operator()(const boost::tuple<int,int,int> &t) const{
size_t seed = 0;
boost::hash_combine(seed, t.get<0>());
boost::hash_combine(seed, t.get<1>());
boost::hash_combine(seed, t.get<2>());
return seed;
}
};
}
}
第一塊給出了這樣的錯誤
unordered.hpp: In member function 'size_t std::tr1::hash<boost::tuples::tuple<A, B, C, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >::operator()(const boost::tuples::tuple<A, B, C, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>&) const':
unordered.hpp:12: error: expected primary-expression before ')' token
unordered.hpp:13: error: expected primary-expression before ')' token
unordered.hpp:14: error: expected primary-expression before ')' token
和第二編譯就好了。第一個模板有什麼問題?我正在使用gcc 4.3.4。
「std :: hash」不是C++ 11的特性嗎?在這種情況下,你也可以使用'std :: tuple'。我相信你錯過了一個'typename'關鍵字。 – AJG85
我認爲'boost :: hash'已經定義爲'boost :: tuple's。如果你使用標準庫,也可以使用'std :: tuple'! –
@ AJG85我使用gcc 4.3.4,其中'hash'仍然在'tr1'中,而'tuple'只在boost中。 –