"Ambiguous call to overloaded function"
"Ambiguous call to overloaded function"
我有一个这样的结构,结构Baz继承了两个不同的结构,Foo和Bar。
我有两个方法调用相同的东西,一个是Foo参数,另一个是Baz参数。
struct Foo
{
};
struct Bar
{
};
struct Baz : Foo, Bar
{
virtual void something(const Foo& foo)
{
};
virtual void something(const Bar& bar)
{
};
};
我把它叫做
Baz baz;
baz.something(baz);
可以理解的是,如果我将Baz的一个实例传递给代码,那么我的代码就不知道我在调用哪个函数。我得到了"对重载函数的模糊调用"。
我知道我可以把我的巴兹交给Foo或Bar来解决这个问题。。。
Baz baz;
baz.something((Bar)baz);
但是有没有其他的方法来处理这个设计问题呢?
只有当传递的对象不是Bar类型时,我才想调用Foo方法。
编辑:
如果这是C#(事实并非如此),我可能可以使用模板where子句来解决这个问题
首先,请注意,您使用的强制转换将创建一个临时对象。你可能是这个意思:
baz.something(static_cast<Bar&>(baz));
为了回答你的问题,应该可以使用SFINAE:
struct Baz : Foo, Bar
{
virtual void something(const Bar &bar)
{ /* ... */ }
template <
class T,
class = typename std::enable_if<
std::is_convertible<const T&, const Foo&>::value &&
!std::is_convertible<const T&, const Bar&>::value
>::type
>
void something (const T &foo)
{ something_impl(static_cast<const Foo&>(foo)); }
private:
virtual void something_impl(const Foo &foo)
{ /* ... */ }
};
实时示例
相关文章:
- 模板规范获取'Ambiguous call to overloaded function'
- "reinterpret_cast":无法通过速推从'overloaded-function'转换为'intptr_t'.dll
- 为什么"std::isdigit"在 Windows 上报告C++"no matching overloaded function"
- cin.get() 导致"no instance of overloaded function"错误
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- 尝试在虚幻引擎中通过C++添加视口时出错"No instance of overloaded function CreateWidget"
- 使用命名空间 std 时C++ "Reference to overloaded function"错误
- 不能使用矢量::插入"no instance of overloaded function..."
- 矩阵类:"No instance of overloaded function push_back matches the argument list"
- 如何修复矢量push_back中的"no instance of overloaded function"?
- "unresolved overloaded function type"错误并将运算符作为函数参数传递
- 派生类的新构造函数未生成:"overloaded member function not found"
- C++向量和错误"no instance of overloaded function"
- MSVS 2012 "ambiguous call to overloaded function"中的编译器错误
- "overloaded member function not found"参考资料
- 如何修复 cin.getline 的"No instance of overloaded function"错误?
- c++ 修改驱动程序,出现"cannot convert from overloaded function"错误
- "more than one instance of overloaded function " 标准::p ow " matches the argument list"
- "Ambiguous call to overloaded function"
- "overloaded function differs only by return type"错误