我正在尝试编写一个类,其中包含几个std::vector作为数据成员,并提供了一部分vector的接口来访问它们:
class Mesh
{
public:
private:
std::vector<Vector3> positions;
std::vector<Vector3> normals;
// Several other members along the same lines
};
您可以通过添加位置、法线和其他内容来操作网格。为了实现类似于STL的方式访问网格(从数组、其他容器等中添加),我考虑添加以下方法:
public:
template<class InIter>
void AddNormals(InIter first, InIter last);
问题在于,根据我的模板理解,这些方法必须在头文件中定义(似乎很合理;没有具体的迭代器类型,编译器就不知道如何为这个方法生成对象代码)。
这真的是个问题吗? 我的直觉是不要把大块的代码塞进头文件中,但我的C++有点生疏,除了玩具示例之外,没有太多STL经验,我不确定什么样的C++编程惯例可以接受。
是否有更好的方法在保留类似STL的通用编程风格的同时公开此功能?一种方法是:
(列表结束)
class RestrictedVector<T>
{
public:
RestrictedVector(std::vector<T> wrapped)
: wrapped(wrapped) {}
template <class InIter>
void Add(InIter first, InIter last)
{
std::copy(first, last, std::back_insert_iterator(wrapped));
}
private:
std::vector<T> wrapped;
};
然后在Mesh上公开这些实例,但这开始有点过度设计:P 任何建议都将不胜感激!