我深化發展一個某種形式的元組結構,我想允許用戶使用其元素領域,命名元組元素
解釋:
這是我的元組:
template<typename ...Ts>
struct myTuple{
std::tuple<Ts...> data;
template<size_t I>
inline type<I>& get_t() { // type<I> is the I'th type
return std::get<I>(data);
}
// Other stuff
};
就目前而言,用戶可以擁有這樣說:
struct UserStruct{
myTuple<int,bool,string> t;
// Other stuff
}
,並使用它像,
UserStruct ob;
ob.t.get_t<0>() = 0;
這是一個有點複雜......所以我做它這樣
struct UserStruct{
myTuple<int,bool,string> t;
decltype(mo.get_t<0>()) myInt() {
return mo.get_t<0>();
}
decltype(t.get_t<1>()) myChar() {
return t.get_t<1>();
}
decltype(t.get_t<2>()) myString() {
return t.get_t<2>();
}
};
這樣他就可以直接使用它:敏()= 0;
我的目標是,他可以使用元組,如果他有一個int, bool, string
數據成員不存儲引用,這意味着我需要一個函數(或仿函數)來獲得引用,所以我的解決方案是好的,但它需要用戶定義功能。 (和吸氣劑真正的代碼看起來更糟糕)
所以我想是這樣的:
struct UserStruct{
myTuple<int,bool,string> t;
MyFunctor<0> myInt; //or an alias to a function
MyFunctor<1> myChar;
MyFunctor<2> myString;
};
你可以使用C++ 14嗎?它有'std :: get()'。 –
Biffen
我已經在使用它,我添加了標籤 –
如果元組有2個字符串或2個字符或2個整數會怎麼樣?你將如何區分它們?我對Herb Sutter有一個模糊的記憶,內容是關於將來的C++版本允許別名用於std :: get,所以你可以命名索引。我不確定它的情況。 – Robinson