从第三方模块复制成员时编写复制构造函数的任何提示被拒绝?

Any tipps on writing a copy constructor when copying a member from a third party module is denied?

我目前正在编写一些代码来从 xml 文件中读取数据。为此,我使用了 pugixml 模块,它提供了 class xml_document 提供的方法来解析文件。 为了存储这些数据,我创建了一个 class tXmlDoc 来管理加载操作(比如设置路径、存储解析结果等等)。 我现在想在这个 tXmlDoc 中包含一个复制构造函数,但是,唉,我不能复制 pugi::xml_document 成员,因为 pugixml 显然明确地拒绝复制,据我了解这个模块的代码.

您对如何处理此问题有何建议?我不想为 pugixml 编写复制构造函数,因为我确信作者有充分的理由否认这一点,我不想 fiddle 那样。

顺便说一句,我对赋值运算符也有类似的问题。

因为 pugi 中似乎只实现了移动构造函数xml。

这是我当前的 tXmlDoc header。

#pragma once

#include <iostream>
#include <string>
#include <array>
#include "../../libs/pugixml-1.11/src/pugixml.hpp"
#include "XmlData_General.h"
#include "XmlNodes.h"

namespace nXml
{
    /**
    * This class provides methods and helper functions to:
    * - read an xml file identified by its file name including suffix and the path to this file
    * - load the root node of the xml document
    * - to manage basic information of the root node
    */
    class tXmlDoc
    {
    public:
        tXmlDoc();
        tXmlDoc(tXmlDoc&); //copy constructor

        ~tXmlDoc();

        tXmlDoc& operator=(const tXmlDoc&);

        void LoadXmlFile(const std::string& file_name, std::string& file_path);

        pugi::xml_node GetRootNode();

        std::string GetFileName();
        std::string GetFilePath();
        std::string GetFullPath(const std::string& file_name, std::string& file_path); 

        void SetFileName(const std::string& file_name);
        void SetFilePath(const std::string& file_path);

        bool GetFileLoaded();
        bool GetNodeCorrect();

        int GetErrorCode();
        int GetChildNumber();

        pugi::xml_parse_result GetXmlResult();

        void LoadData();
        void CheckNode();

    protected:
        std::string file_path = ""; //is set when calling LoadXmlFile
        std::string file_name = ""; //is set when calling LoadXmlFile

        bool file_loaded = false; //provides information is file was successfully loaded (file correctly loaded: true). Modified by method LoadXmlFile
        bool node_correct = false; //indicating of node structure on its child level is correct

        int error_code = 0; //provides information about occuring errors (no error: 0). Modified by method LoadXmlFile

        int n_childs = 0;

        pugi::xml_node root_node = pugi::xml_node(); //contains the root node of the xml document. Filled when calling LoadData (via calling GetRootNode inside LoadData)
        pugi::xml_parse_result xml_result; //contains information about parsing result. Filled by method LoadXmlFile    
        pugi::xml_document xml_doc; //contains the entire document

        //make sNodeNames known
        sXmlNodeNames sNodeNames;
    }
    ;

};

是否可以手动复制:

我发现 this question 关于这个主题

xml_document copy;
copy.reset(doc);

如果您不想真正复制它,另一种选择是将 shared_ptr 保留为 xml-root 的 const 版本。