Информация об изменениях

Сообщение Re[8]: бессмысленные интерфейсы от 21.02.2022 19:36

Изменено 21.02.2022 19:48 AlexGin

Re[8]: бессмысленные интерфейсы
Здравствуйте, B0FEE664, Вы писали:

BFE>Что такое "проблема перекрёстных ссылок"?

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; // Здесь ссылаемся на объект типа SubNode
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; // Здесь ссылаемся на объект типа Node
BFE>};
BFE>

Вот отсюда и _проблема_перекрёстных_ссылок_

BFE>Вы это пытались компилировать? Зачем?

Вообще-то я и без копиляции увидел у тебя проблему перекрёстных ссылок.
Однако, на всякий случай, лишний раз убедился — что у тебя ошибка.

BFE>
  Скрытый текст
BFE>
BFE>#include <iostream>
BFE>#include <vector>
BFE>#include <memory>
BFE>#include <string>

BFE>class Node;

BFE>class SubNode // Интерфейс узла:
BFE>{
BFE>public:
BFE>    inline std::string                 GetNameOfNode() const     ;
BFE>    inline const std::vector<SubNode>& GetVectOfChilds() const   ;
BFE>    inline void                        AddNode(SubNode node)     ;
BFE>public:
BFE>    std::shared_ptr<Node> m_node; // Здесь компилятор НЕ ЗНАЕТ размер объекта типа Node
        // Ссылка или указатель на объект типа Node здесь прокатят, значение - НЕТ
BFE>};


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>



AG>так и для тестирования основы нашего проекта.

BFE>Про связь с тестированием я не понял.
AG>>Вот насчёт тестов:
AG>>https://chromium.googlesource.com/external/github.com/google/googletest/+/refs/tags/release-1.8.0/googlemock/docs/ForDummies.md
AG>>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

BFE>И где конкретно у них написано, что продакшен код надо замедлять, чтобы проще было писать тесты?


Кто и где предлагал замедлять продакшн код? Что есть фактор замедления?

P.S. Если ты предполагаешь, что вызов через таблицу виртуальных функций (vtable) вносит замедление,
то для аппаратуры последних 15 лет это уже не актуально.
Re[8]: бессмысленные интерфейсы
Здравствуйте, B0FEE664, Вы писали:

BFE>Что такое "проблема перекрёстных ссылок"?

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; // Здесь ссылаемся на объект типа SubNode
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; // Здесь ссылаемся на объект типа Node
BFE>};
BFE>

Вот отсюда и _проблема_перекрёстных_ссылок_

BFE>Вы это пытались компилировать? Зачем?

Вообще-то я и без копиляции увидел у тебя проблему перекрёстных ссылок.
Однако, на всякий случай, лишний раз убедился — что у тебя ошибка.

BFE>
BFE>#include <iostream>
BFE>#include <vector>
BFE>#include <memory>
BFE>#include <string>

BFE>class Node;

BFE>class SubNode // Интерфейс узла:
BFE>{
BFE>public:
BFE>    inline std::string                 GetNameOfNode() const     ;
BFE>    inline const std::vector<SubNode>& GetVectOfChilds() const   ;
BFE>    inline void                        AddNode(SubNode node)     ;
BFE>public:
BFE>    std::shared_ptr<Node> m_node; // Здесь компилятор НЕ ЗНАЕТ размер объекта типа Node
        // Ссылка или указатель на объект типа Node здесь прокатят, значение - НЕТ
BFE>};


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>


AG>так и для тестирования основы нашего проекта.

BFE>Про связь с тестированием я не понял.
AG>Вот насчёт тестов:
AG>https://chromium.googlesource.com/external/github.com/google/googletest/+/refs/tags/release-1.8.0/googlemock/docs/ForDummies.md
AG>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

BFE>И где конкретно у них написано, что продакшен код надо замедлять, чтобы проще было писать тесты?


Кто и где предлагал замедлять продакшн код? Что есть фактор замедления?

P.S. Если ты предполагаешь, что вызов через таблицу виртуальных функций (vtable) вносит замедление,
то для аппаратуры последних 15 лет это уже не актуально.