【发布时间】:2014-01-04 22:19:46
【问题描述】:
我有一个基本类型 Item<N>,它依赖于一个整数模板参数 N 和类 Data,它为几个不同的 N 保存 Item<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?
【问题讨论】:
-
可能是 N = [1..5] 范围内的某种递归定义?我仍然在这里尝试了解您的用例:
N与Data的实例化规则相关的条件是什么? -
导致您提出这个问题的设计选择似乎很糟糕。此代码不是自我记录的,因此存在维护风险。名称是编写现代可维护代码的重要组成部分——不要低估它们的价值。我建议寻找更优雅的设计。数字模板似乎不太适合项目。
-
@Mark:我正在寻找更优雅的设计,因此提出了问题;)