相关疑难解决方法(0)

是否可以从STL容器继承实现,而不是委托?

我有一个类,它适应std :: vector来模拟特定于域的对象的容器.我想向用户公开大多数std :: vector API,以便他/她可以在容器上使用熟悉的方法(大小,清晰,等等......)和标准算法.在我的设计中,这似乎是一种反复出现的模式:

class MyContainer : public std::vector<MyObject>
{
public:
   // Redeclare all container traits: value_type, iterator, etc...

   // Domain-specific constructors
   // (more useful to the user than std::vector ones...)

   // Add a few domain-specific helper methods...

   // Perhaps modify or hide a few methods (domain-related)
};
Run Code Online (Sandbox Code Playgroud)

我知道在重用类实现时更喜欢使用组合继承的做法 - 但是必须有限制!如果我将所有内容委托给std :: vector,那么(按我的计数)将有32个转发函数!

所以我的问题是......在这种情况下继承实施真的很糟糕吗?有什么风险?有没有更安全的方式我可以在没有这么多打字的情况下实现这一点?我是使用实现继承的异教徒吗?:)

编辑:

如何明确用户不应该通过std :: vector <>指针使用MyContainer:

// non_api_header_file.h
namespace detail
{
   typedef std::vector<MyObject> MyObjectBase;
}

// api_header_file.h
class MyContainer : public detail::MyObjectBase
{
   // ... …
Run Code Online (Sandbox Code Playgroud)

c++ stl

73
推荐指数
5
解决办法
3万
查看次数

自动检查std :: vector中的边界

在使用的类的主动开发期间std::vector,通常会发生索引超出范围.(有关实际示例,请参阅此代码复习问题.)使用时operator[],会导致未定义的行为.尽管如此,[]语法易于阅读比写作更方便.at().

因此,我想使用[]运算符编写代码,但同时启用了边界检查.在测试代​​码之后,应该很容易删除边界检查.

我在考虑以下代码:

util::bound_checked<std::vector<int>> numbers;

numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(3);
numbers.push_back(4);
std::cout << numbers[17] << "\n";
Run Code Online (Sandbox Code Playgroud)

对我来说,这个实用程序模板似乎是如此简单,我希望它存在.可以?如果是这样,以哪个名字?

c++ stdvector undefined-behavior

11
推荐指数
2
解决办法
766
查看次数

标签 统计

c++ ×2

stdvector ×1

stl ×1

undefined-behavior ×1