gpt4 book ai didi

c++ - 如何模仿模板变量声明

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:19 25 4
gpt4 key购买 nike

我有一个基本类型 Item<N>这取决于整数模板参数 N和类 Data其中包含 Item<N> 的实例对于几种不同的 N .

这是一个例子:

template<unsigned N>
struct Item { ... }; // some template data type

struct Data
{
std::set<Item<1>> items1;
std::set<Item<2>> items2;
std::set<Item<3>> items3;
std::set<Item<4>> items4;
std::set<Item<5>> items5;

bool contains(const Item<1>& x) { return items1.find(x) != items1.end(); }
bool contains(const Item<2>& x) { return items2.find(x) != items2.end(); }
bool contains(const Item<3>& x) { return items3.find(x) != items3.end(); }
bool contains(const Item<4>& x) { return items4.find(x) != items4.end(); }
bool contains(const Item<5>& x) { return items5.find(x) != items5.end(); }
};

现在有几个函数,比如 contains有很多代码重复。有没有更优雅的方式来实现 Data

最佳答案

例如,您可以存储一个合适的 std::tuple<...>并拥有你的contain()函数是一个模板,例如:

template <int... I>
struct DataImpl {
std::tuple<std::set<Item<I>>...> data;
template <int J>
bool contains(Item<J> const& x) {
return std::get<J-1>(data).find(x) != std::get<J-1>(data).end();
}
};
using Data = DataImpl<1, 2, 3, 4, 5>;

关于c++ - 如何模仿模板变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927455/

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