Для некоторых классов статической библиотеки C ++ я хочу предложить различные интерфейсы для пользователя библиотеки и для самой библиотеки.
Пример:
class Algorithm {
public:
// method for the user of the library
void compute(const Data& data, Result& result) const;
// method that I use only from other classes of the library
// that I would like to hide from the external interface
void setSecretParam(double aParam);
private:
double m_Param;
}
Моя первая попыткадолжен был создать внешний интерфейс как ABC:
class Algorithm {
public:
// factory method that creates instances of AlgorithmPrivate
static Algorithm* create();
virtual void compute(const Data& data, Result& result) const = 0;
}
class AlgorithmPrivate : public Algorithm {
public:
void compute(const Data& data, Result& result) const;
void setSecretParam(double aParam);
private:
double m_Param;
}
Плюсы:
- Пользователь Алгоритма не может видеть внутренний интерфейс
Минусы:
- Пользователь должен использовать фабричный метод для создания экземпляров
- Мне нужно уменьшить Algorithm до AlgorithmPrivate, когда я хочу получить доступ к секретным параметрам из библиотеки.
Надеюсь, вы понимаете, чего я добиваюсь, и с нетерпением жду любых предложений.