关于这篇文章
How do I abstract away from using RogueWave in legacy code?
就像这样-
template<class T, class Container = std::deque<T> >
class my_stack
{
public:
void push(const T& t)
{
m_stack.push(t);
}
// ... so on ...
protected:
std::stack<T, Container> m_stack;
};包装器是RogueWave::stack和std::stack方法的联合吗?或者我们是否公开底层的std::stack对象以供客户端直接调用std::stack方法?请给我一些想法。
谢谢。
发布于 2018-12-11 13:27:51
为什么不用没有包装器的std::stack替换RougeWave::stack呢?
包装器方法需要维护包装器和容器类之间的接口。您需要正确地处理像右值引用这样的事情,但是除非您添加了重要的功能(对于std::stack,这似乎不太可能),否则您可以从中获得的好处是有限的。
我看到您有protected:,所以可能是您在容器上使用了继承。这也可能是一件值得删除的好事情。
std::stack现在是语言的一部分,它将比像RogueWave这样的第三方库拥有更长的生命周期。
发布于 2019-02-16 11:50:45
我们即将结束一个在遗留代码中包装和删除RW的漫长项目。我将以RWOrdered为例,用OOrdered替换它。
如果你有包含RW的代码,那么它很可能是遗留代码。如果你发现移除RW不是小事,那么它可能是很大的。您可能不再了解其设计的所有细节。改变它的工作方式可能会带来很多麻烦。应避免RWOrdered和OOrdered之间的任何接口或行为差异。
如果你用像RW这样的东西替换RW,你就摆脱了许可费,拥有你所有的代码,可以做64位构建,等等。但是你没有得到比RW更好的东西。您可能不希望将其用作所有未来容器的基础。
RW在当时是世界级的代码。你正在用自制软件取代它,即使你包装了世界级的std容器。有时,std类与RW类的工作方式不同。你将不得不解决RW已经解决的问题。您还会发现std库解决了RW没有解决的问题。
在RW中,RWCollectable定义了isEqual()、compareTo()和hash()。也就是说,等价性和等价性对所有集合都可用。有时,RW混合了相等和等价,特别是当集合嵌套时。
您需要知道哪个RW函数做了什么,以及哪个std库实体做了什么。您需要选择与RW行为完全匹配的方式,或者选择不同的方式。
按部就班地进行。
抓取
https://stackoverflow.com/questions/53717761
复制相似问题