我知道常见问题的答案如何指定指向重载函数的指针?:无论是赋值还是强制转换,所有其他 C++ 教程都会将这样的字符串大写(give 或 take 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);
它巧妙地选择<cctype>
了std::toupper
.
但这引出了一个问题:如何<locale>
以类似的方式选择重载?
char (*fp2)(char, const std::locale&) = std::toupper;
transform(in.begin(), in.end(), back_inserter(out), fp2);
// error: too few arguments to function
或者,更实际地,考虑有人试图std::stoi
在算法中使用 C++11 将字符串向量转换为整数向量:stoi
有两个重载 ( string
/ wstring
),每个都采用两个额外的默认参数。
假设我不想显式绑定所有这些默认值,我相信如果不将此类调用包装在辅助函数或 lambda 中,就不可能做到这一点。是否有一个提升包装器或 TMP 魔法可以以完全通用的方式为我做这件事?一个包装器可以像call_as<char(char)>(fp2)
或者更有可能call_as<int(const std::string&)>(std::stoi)
被编写吗?