如何按返回类型重载?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

我在这里读到了一些关于这个话题的问题,但我觉得有些困惑。我刚刚开始学习C++,我还没有学习模板或操作符重载等等。

现在有一个简单的方法来超载吗?

class My {
public:
    int get(int);
    char get(int);
}

没有模板或奇怪的行为?还是我应该

class My {
public:
    int get_int(int);
    char get_char(int);
}

?

提问于
用户回答回答于

不,没有。你不能基于返回类型重载方法。

重载解析考虑到函数签名。功能签名由以下部分组成:

  • 函数名称
  • CV-预选赛
  • 参数类型

这里是引用:

1.3.11签名

有关参与重载解析(13.3)的函数的信息:其参数类型列表(8.3.5),如果函数是类成员,则函数本身和类的cv限定符(如果有的话)在其中声明了成员函数。[...]

选项:

1)更改方法名称:

class My {
public:
    int getInt(int);
    char getChar(int);
};

2)输出参数:

class My {
public:
    void get(int, int&);
    void get(int, char&);
}
用户回答回答于

这是可能的,但我不确定这是否是我推荐给初学者的一种技术。与其他情况一样,当你希望函数的选择取决于如何使用返回值时,可以使用代理;首先定义如下的函数getChargetInt,然后是一个通用的get()它返回这样的代理:

class Proxy
{
    My const* myOwner;
public:
    Proxy( My const* owner ) : myOwner( owner ) {}
    operator int() const
    {
        return myOwner->getInt();
    }
    operator char() const
    {
        return myOwner->getChar();
    }
};

将其扩展到你需要的任意类型。

扫码关注云+社区

领取腾讯云代金券