У меня есть библиотека с полностью общей реализацией, за исключением одного класса A
. Этот класс имеет только одну функцию int format(int i){}
, но его нельзя использовать как есть: format
зависит от каждого отдельного приложения и должен быть определен пользователем. В частности, format
содержит довольно много операторов if-then, которые необходимо правильно установить для среды приложения. Однако остальная часть библиотеки является полностью общей и будет работать с любым выбором format
, который соответствует определенным спецификациям.
Вопрос: Как лучше всего позволить пользователю моей библиотеки определить, как format
работает? Это необходимо сделать на уровне кода (в отличие от простого использования файла конфигурации).
Очевидная идея состоит в том, чтобы пользователь напрямую переписал определение format
непосредственно в исходном коде, ноэто не самый элегантный способ сделать это.
Другая идея заключается в использовании наследования: пусть пользователь определит класс userA
, наследующий от A
, а затем скроет функцию format
,Но остальная часть библиотеки использует класс A
вместо userA
. На этом этапе можно было бы заменить все экземпляры A
на имя типа desiredA
, а затем дать пользователю возможность определить это имя типа userA
. Это тоже не очень элегантно.
Должен быть лучший способ сделать это правильно?