我有一个SpecialArray
可以像标准二维数组一样访问的类;即,作为A[i][j]
。int
经常需要从该对象中提取一维数组。取决于其他传递参数的提取细节无关紧要。我对设计操作界面很感兴趣。
以下完成此任务的方法有哪些优点和缺点?
选项1
我们定义一个函数:
std::vector<int> extract(const SpecialArray &A, ...)
其中这里...
指的是其他决定一维数组内容的参数,用为:
std::vector<int> output = extract(A,...);
选项 2
我们创建一个继承自 std::vector 并构建自身的类:
class SpecialArrayExtract : public std::vector<int> {
public:
SpecialArrayExtract(const SpecialArray &A, ...);
};
其中构造函数(或等效的init
函数)使用...
输入来填充*this
适当的数据,我们将其用作:
SpecialArrayExtract output(A,...);
选项 3
我们完全按照选项 2 进行操作,但不继承自std::vector<int>
一个成员,而是根据需要公开一个具有接口的private
成员:std::vector<int>
class SpecialArrayExtract {
private:
std::vector<int> m_data;
public:
SpecialArrayExtract(const SpecialArray &A, ...);
[Wrapper functions for std::vector<int> here.]
};
评论
该应用程序是高性能的,但是在选项 1 中使用 RVO,我假设这些都应该具有同等的性能。
将其与标题联系起来,我想要说明的一点是,选项 2 和 3 都定义了本质上只是std::vector<int>
具有不同名称和特殊构造函数的类。什么时候——如果有的话!——这是一个合理的想法吗?哪种方法更好?