除lambda和static_cast外,如何更简便指定重载函数的目标定义?
如何更简便地将重载函数绑定到std::function?
假设有以下两个重载函数:
int function_name(std::string); int function_name(std::string, std::string);
当尝试将其中一个重载版本作为struct成员初始化时:
struct My_struct { std::function<int(std::string)> function_name; }; // ... My_struct function_struct = { function_name };
编译器会报错,因为无法确定要选用哪个重载版本。
已知的两种解决方法
使用static_cast转换为函数指针:
static_cast<int(*)(std::string)>(function_name);用这个转换后的表达式替代初始化列表里的
function_name,即可明确指定目标重载版本。使用lambda表达式包裹:
My_struct function_struct = { [](std::string my_string) { return function_name(my_string); } };通过lambda的参数列表匹配目标重载,让编译器自动推导选择对应的函数版本。
疑问
以上两种方法都能解决问题,但有没有更优或更简便的实现方式?
内容的提问来源于stack exchange,提问作者cam.b
相关产品推荐
相关产品推荐

