通过具有转换参数的私有方法重载

Overloading by private method with converted parameter

本文关键字:有方法 重载 参数 转换      更新时间:2023-10-16

使用以下代码,我得到:error: ‘void B::add(int)’ is private。我只是很惊讶,但也很失望得到这个。。。我知道add(int)方法是私有的,但为什么编译器不能继续寻找其他解决方案,即构造一个A对象,因为构造函数是A(int)

这种行为是由C++标准定义的吗?

有没有解决这个问题的办法,或者我必须重命名我的私有方法/应用皮条习惯用法?

谢谢。

struct A
{
  A(int) {}
};

struct B
{
  void add(const A&) { } 
private:
  void add(int) { } 
};
int main()
{
  B b;
  b.add(5);
  return 0;
}

因为void add(int)b.add(5)最匹配。

你可以用b.add(A(5));来解决这个问题。