相关疑难解决方法(0)

什么是C++最好的开放XML解析器?

我正在寻找一个简单,干净,正确的XML解析器,以便在我的C++项目中使用.我应该自己写吗?

c++ xml open-source

241
推荐指数
11
解决办法
29万
查看次数

是否可以从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万
查看次数

在使用TinyXml for C++时,我需要清理哪些内存管理?

我正在使用TinyXml执行以下操作:

TiXmlDocument doc;
TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );
TiXmlElement* main = new TiXmlElement("main");

TiXmlElement* header = new TiXmlElement("header");
header->SetAttribute("attribute","somevalue");
main->LinkEndChild(header);

// ... Add many more TiXmlElment* to other elements all within "main" element

doc.LinkEndChild(decl);
doc.LinkEndChild(main);

// ... do stuff with doc

// Now I am done with my doc. What memory management happens here? 
Run Code Online (Sandbox Code Playgroud)

在我的程序执行结束时,是否会在超出范围TiXmlElement*时清理所有内容doc?我是否需要遍历文档树并释放所有内存?

c++ memory-management tinyxml

5
推荐指数
1
解决办法
3980
查看次数

标签 统计

c++ ×3

memory-management ×1

open-source ×1

stl ×1

tinyxml ×1

xml ×1