我試圖處理元組的數據結構,但是我需要製作一個真正從全局數據結構中提取數據的「元組」數據抓取取決於值的索引。它已經與這個簡單的設置得不錯,到目前爲止:創建一個僞元組,爲其他地方存儲數據的前端
struct PseudoTuple
{
struct ReturnWrapper
{
//lots of operator overloads and fun stuff for comparisons
}
typedef ReturnWrapper value_type;
//pointers to global data and various info
static const size_t size = 9;
ReturnWrapper operator[](int index)
{
switch (index)
{
//routing to different values
}
}
}
template<> struct std::tr1::tuple_size<PseudoTuple>
{
static const size_t value = PseudoTuple::size;
}
但是,我餵養想要使用std::tr1::get
這些假冒的元組數據結構,和我嘗試過載已失敗:
template<int _Idx> PseudoTuple::ReturnWrapper std::tr1::get(PseudoTuple& pseudotuple)
{
return pseudotuple[_Idx];
}
說它「無法匹配現有的函數聲明」。 STL聲明非常混亂,我無法弄清楚問題所在。這是在Visual C++ 2010中,以防萬一。我擔心其他元組特定的函數也會被調用,但是我希望看到如何使get
工作,也會告訴我如何使它們工作(如果需要的話)。
編輯:ecatmur建議將函數的命名空間:
namespace std
{
namespace tr1
{
template<int _Idx> PseudoTuple::ReturnWrapper get(PseudoTuple& pseudotuple)
{
return pseudotuple[_Idx];
}
}
}
現在我就在我面前了,在沒有相應的獲取函數的錯誤:
error C2784: '_Arg_traits<_Get<_Idx,tuple<_Arg0,_Arg1,_Arg2,_Arg3,_Arg4,_Arg5,_Arg6,_Arg7,_Arg8,_Arg9>::_MyImpl>::_Type>::_RType std::tr1::get(std::tr1::tuple<_Arg0,_Arg1,_Arg2,_Arg3,_Arg4,_Arg5,_Arg6,_Arg7,_Arg8,_Arg9> &)' : could not deduce template argument for 'std::tr1::tuple<_Arg0,_Arg1,_Arg2,_Arg3,_Arg4,_Arg5,_Arg6,_Arg7,_Arg8,_Arg9> &' from 'const PseudoTuple'
編輯2 :啊,定義的順序是錯誤的,我在使用它之後定義函數。我想它適用於像tuple_size
但不是函數的結構。
它適用於'tuple_size'就好,儘管它不是一個函數。您的解決方案取代了我目前獲得的錯誤,當時我根本沒有get功能。我將編輯將它放在主帖子中。 – user173342
@ user173342您需要提供const引用和(如果適用)右值引用重載。 – ecatmur