Вспомогательная функция и абстракция в с ++ - PullRequest
1 голос
/ 14 октября 2019

С учетом 16.3.2 вспомогательных функций языка программирования С ++ Бьярна Страуструпа предположим, что у нас есть интерфейс

namespace IO
{
   class IImge
   {
   public:
       virtual double getThreshold() = 0;
       ...
   }
}

, у нас есть конкретный класс

namespace IO
{
    class Image :public IImge
    {
    public:
        double getThreshold() override {return 20.0}
    }
}

и предполагается, что мы хотим добавитьвспомогательная функция, подобная этой

double getNormalizedThreshold(IImage* image) {return image->getThreshold() / 100;}

, где разместить объявление функции? Во IImage или Image?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Я думаю, что вопрос основан на мнении. По моему личному мнению, вспомогательные функции должны быть объявлены в пространстве имен, а не внутри какого-либо из классов, и должны использовать только открытый API-интерфейс таких классов. Они должны быть сгруппированы по назначению и назначению.

2 голосов
/ 14 октября 2019

Поскольку вашей вспомогательной функции не нужно знать Image, логическое место для ее размещения - IImage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...