我的项目存在以下设计难题:
我有一个I类的对象设计存储在std::vector
中。
我想为这种向量添加一些方法(std::vector<MyClass>
)。
我想将这个向量封装在另一个类中并添加我需要的这些方法,当然还提供了我使用的std::vector
的所有功能。这是一个明智的想法吗?或者我应该只使用非成员函数,也许我自己方便使用typedef
?
答案 0 :(得分:1)
只有当你的类型真的是一个向量时才应该使用typedef。 typedef使您无法控制自己的类型行为以及使用它可以执行的操作。
如果没有,如果你想要一个适当的长寿命设计,那么你应该隐藏实现细节:
两种方式:
答案 1 :(得分:1)
如果我理解正确,你想拥有一个自定义容器,它提供std :: vector成员函数和特定于该容器的自定义函数吗?
IMO,在您的情况下最适合的方式是创建自己的类型并封装您的向量:
class MyClass{};
class MyContainer {
using size_type = std::vector<MyClass>::size_type;
public:
MyContainer() = default;
MyContainer(std::vector<MyClass> const& vec) : vec_(vec) {}
size_type size() const noexcept;
// other functions you want
private:
std::vector<MyClass> vec_;
};
其他“坏”选项是:
希望它会对你有所帮助。
答案 2 :(得分:1)
在这种情况下,非成员函数是正确的。请参阅Scott Meyer关于How Non-Member Functions Improve Encapsulation主题的文章。
此外,请使用typedef std::vector<MyClass> someTypeName;
您不希望std::vector<MyClass>
遍布整个代码。您想要 类型的内容而不是它的实现方式。如果你必须改变实现以使用不同的容器,你会很高兴你使用了typedef。
ETA:我提醒using
及其对typedef
的优越性。
using someTypeName = std::vector<MyClass>;