我有一个重载的函数。其中 2 个过载是
void foo(std::string_view v);
void foo(MyClass m);
哪里MyClass
有来自 的转换构造函数std::string
。如何强制呼叫foo(std::string{})
第一个呼叫?现在编译时不会出现错误:
错误:重载的 'foo(std::__cxx11::basic_string&)' 的调用不明确
我有一个重载的函数。其中 2 个过载是
void foo(std::string_view v);
void foo(MyClass m);
哪里MyClass
有来自 的转换构造函数std::string
。如何强制呼叫foo(std::string{})
第一个呼叫?现在编译时不会出现错误:
错误:重载的 'foo(std::__cxx11::basic_string&)' 的调用不明确
您可以使构造函数显式化
或抛出论点
或将指针转换为函数
您可以使应该排名较低的模板函数重载
该列表并不完整。应首选第一个选项,因为通常要避免隐式转换。请注意上述方法的差异。显式构造函数只会导致两个重载之一可行。强制转换显式选择两个(否则同样良好)重载之一。最终,将另一个重载转换为模板,将两个重载保留为替代方案,但使所需的重载在重载解析方面排名更好。
只需添加一个用于
static_cast
调用string_view
重载的重载,如下所示:演示