Здравствуйте, уважаемый B0FEE664, Вы писали:
BFE>Для того, чтобы уменьшить связность, виртуальные методы не нужны:
BFE>BFE>class SubNode;
BFE>class Node
BFE>{
BFE>public:
BFE> Node(const std::string& sNameOfNode); // C-tor
BFE> ~Node(); // D-tor
BFE> std::string GetNameOfNode() const;
BFE> const std::vector<SubNode>& GetVectOfChilds() const;
BFE> void AddNode(SubNode p);
BFE>private:
BFE> std::vector<SubNode> m_SubNodes;
BFE>};
BFE>class SubNode // Интерфейс узла:
BFE>{
BFE>public:
BFE> std::string GetNameOfNode() const { return m_node->GetNameOfNode(); }
BFE> const std::vector<SubNode>& GetVectOfChilds() const { return m_node->GetNameOfNode(); }
BFE> void AddNode(SubNode node) { return m_node->AddNode(node); }
BFE>public:
BFE> std::shared_ptr<Node> m_node;
BFE>};
BFE>
Прекрасно!
У нас уже (с Вашей подачи) — две равнозначные сущности.
Там, напомним, где в принципе достаточно одной (плюс вспомогательная:
интерфейс).
Я вот посмотрел и подумал — есть
Node, есть
SubNode.
Есть
Forward Declaration, которое так и не решило проблему перекрёстных ссылок.
Зачем так сложно?
Почему так не-KISS-ло всё накручено?
Неудивительно, что это всё даже не компилируется
AG>>так и для тестирования основы нашего проекта.
BFE>Про связь с тестированием я не понял.
Вот насчёт тестов:
https://chromium.googlesource.com/external/github.com/google/googletest/+/refs/tags/release-1.8.0/googlemock/docs/ForDummies.md
https://chromium.googlesource.com/external/github.com/google/googletest/+/refs/tags/release-1.8.0/googlemock/docs/FrequentlyAskedQuestions.md#how-am-i-supposed-to-make-sense-of-these-horrible-template-errors