我深化发展一个某种形式的元组结构,我想允许用户使用其元素领域,命名元组元素
解释:
这是我的元组:
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