2012-07-23 151 views
1

我正在为SQL数据库打包,我返回的对象是shared_ptr
我想支持阵列类型访问(即row["column"]而不是row->get("column"))。对象shared_ptr存储支持数组类型访问,但当然shared_ptr不支持。
我应该怎么做shared_ptrs,我需要延长课程吗?C++ shared_ptr数组类型访问

+1

@BoBTFish:我似乎记得operator []必须是一个meber ... – 2012-07-23 08:49:52

+0

正确,我只是坚持认为那是第一个想法。现在我测试了一下,发现它不起作用,我删除了这个建议。 – BoBTFish 2012-07-23 08:56:46

+3

(* row)[“column”] – 2012-07-23 08:58:01

回答

2

最明显的是将operator[]添加到shared_ptr。 这意味着定义你自己的shared_ptr重用std :: shared_ptr并让[]运算符以你想要的方式工作。

这可以通过派生shared_ptr以快速和肮脏的方式完成(注意:shared_ptr不是多态对象,所以不要混淆std ::和你在同一个上下文中,以便你可以重用他们的接口) 。

如果你是一个球迷,“如果析构函数不是虚拟的不派生”,比它是由你来嵌入的std :: shared_ptr的在yourptr,并重写的shared_ptr接口yourptr一个,委派功能你必须保留。

+0

我希望避免重写接口,但看到它的析构函数不是虚拟的,我想我没有太多的选择。出于好奇,你知道为什么标准库函数不是虚拟的吗?这是一种表演吗? – user1520427 2012-07-23 09:07:57

+0

因为它们不适用于“多态性”。问题是,OOP粉丝认为derivationm仅适用于OOP。但是,这是他们的错,而不是谁的来源。请参阅http://stackoverflow.com/a/10478845/924727或http://stackoverflow.com/a/11202368/924727 – 2012-07-23 09:33:56

+0

伟大的回复,谢谢你的链接。 – user1520427 2012-07-23 10:08:10