Я знаю ответ на часто задаваемый Как мне указать указатель на перегруженную функцию? : Либо с присваиванием или с приведением типов, а во всех других руководствах по C ++ строка выглядит в верхнем регистре (плюс-минус static_cast
):
transform(in.begin(), in.end(), back_inserter(out), (int(*)(int)) std::toupper);
Или вот так:
int (*fp)(int) = std::toupper;
transform(in.begin(), in.end(), back_inserter(out), fp);
Что аккуратно выбирает
перегрузка std :: toupper
.
Но возникает вопрос: как я могу аналогичным образом выбрать перегрузку
?
char (*fp2)(char, const std::locale&) = std::toupper;
transform(in.begin(), in.end(), back_inserter(out), fp2);
// error: too few arguments to function
Или, более практично, представьте, что кто-то пытается использовать C ++ 11 std :: stoi
в алгоритме преобразования вектора строк в вектор целых чисел: stoi
имеет две перегрузки ( строка
/ wstring
), каждая из которых принимает два дополнительных аргумента по умолчанию.
Предполагая, что я не хочу явно связывать все эти значения по умолчанию, Я считаю, что это невозможно сделать, не заключив такой вызов во вспомогательную функцию или лямбду. Есть ли обертка для ускорения или магия TMP, чтобы сделать это для меня в полностью универсальном виде? Может ли обертка вроде call_as
или, что более вероятно, call_as
даже быть написано?