Вы можете принять подход, который использовала библиотека pthreads
, используя отдельный класс / структуру для хранения информации об атрибутах потока.В вашем случае эта дополнительная информация об атрибуте будет содержать информацию о политике и т. Д. Таким образом, вы можете сделать свои функции похожими на следующие:
ContentPtr *publish(char *data, ssize_t length, cache_attr* attributes);
ContentPtr *publish(FILE *fd, cache_attr* attributes);
Затем, если пользователь передает значение NULL последнему аргументу, используйте любойпо умолчанию вы чувствуете, как в базовой реализации.В противном случае пользователь может передать структуру / класс, который описывает все необходимые атрибуты, необходимые для реализации правильной политики.Хорошая вещь в этом подходе заключается в том, что вы всегда можете иметь некоторый тип абстрактного базового класса в качестве интерфейса, а затем создавать производные классы, которые питаются от некоторого типа фабричной функции, если хотите ... в любом случае, это делает интерфейсгибкий как для себя, так и для конечного пользователя.