gpt4 book ai didi

c++ - 命名元组元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:09 24 4
gpt4 key购买 nike

我正在开发某种元组结构,我希望允许用户将其元素用作字段,

解释:

这是我的元组:

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>();
}
};

所以他可以直接使用它:myInt() = 0;

我的目标是他可以像使用 int, bool, string 数据成员 一样使用元组而不存储引用,这意味着我需要一个函数 (或仿函数)来获取引用,所以我的解决方案很好,但它需要用户定义函数。 (而且 getter 在真实代码中看起来更糟糕)

所以我想要这样的东西:

struct UserStruct{
myTuple<int,bool,string> t;

MyFunctor<0> myInt; //or an alias to a function

MyFunctor<1> myChar;

MyFunctor<2> myString;
};

最佳答案

代码类似于MyFunctor<0> myInt;如果不向仿函数提供 t 也无法工作,因此它知道要链接到哪个元组。但是,您可以添加一个宏来为您构建访问器,假设元组名称为 t(或者您将其提供给宏)。

#define LINK_MEMBER(ID, NAME) decltype(t.get_t<ID>()) NAME() {  \
return t.get_t<ID>(); \
}

那么你的代码看起来像

struct UserStruct{
myTuple<int,bool,string> t;
LINK_MEMBER(0, myInt); //or an alias to a function
LINK_MEMBER(1, myChar);
LINK_MEMBER(2, myString);
};

关于c++ - 命名元组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com