У меня есть функция шаблона, назовите ее "клиентом":
template<typename T>
void client(T (*func)(const std::string&), const std::string& s) {}
Тогда существует ряд "адаптированных" функций, которые имеют одинаковый тип первого аргумента, отличного от значения по умолчанию, но следующие аргументы различаются по числу и имеют значения по умолчанию:
void adaptee_one(const std::string&, int i = 1, char* c = nullptr) {}
void adaptee_two(const std::string&, float* f = nullptr) {}
Вышеуказанные функции являются заданными. Теперь то, что я хочу сделать, - передать их вышеприведенной функции client<>()
в качестве первого параметра, и мне остается только передать первый аргумент, const std::string&
. Поэтому я делаю следующее:
void bindAdapteeOne(const std::string& s) {
return adaptee_one(s);
}
void bindAdapteeTwo(const std::string& s) {
return adaptee_two(s);
}
И затем перейдите bindAdapteeX()
в client<>()
.
То, что я хотел бы сделать, - автоматизировать упаковку или иметь одну (шаблонизированную) упаковку вместо одного адаптера. Я чувствую, что это может иметь место для вариаторов, но у них мало идеи о том, как их применять.
С++ 11 в порядке, С++ 14 прекрасно, если это абсолютно необходимо.