首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按返回类型重载

按返回类型重载
EN

Stack Overflow用户
提问于 2012-03-05 23:04:37
回答 9查看 88.8K关注 0票数 88

我在这里读到的关于这个话题的问题很少,这对我来说似乎仍然令人困惑。我刚刚开始学习C++,还没有学习过模板或者操作符重载之类的东西。

现在有没有一种简单的重载方法?

代码语言:javascript
复制
class My {
public:
    int get(int);
    char get(int);
}

没有模板或奇怪的行为?或者我应该干脆

代码语言:javascript
复制
class My {
public:
    int get_int(int);
    char get_char(int);
}
EN

回答 9

Stack Overflow用户

发布于 2012-03-05 23:21:01

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

代码语言:javascript
复制
class Proxy
{
    My const* myOwner;
public:
    Proxy( My const* owner ) : myOwner( owner ) {}
    operator int() const
    {
        return myOwner->getInt();
    }
    operator char() const
    {
        return myOwner->getChar();
    }
};

根据需要将其扩展到任意多个类型。

票数 85
EN

Stack Overflow用户

发布于 2012-03-05 23:08:18

不,您不能通过返回类型重载;只能通过参数类型和常量/易失性限定符进行重载。

一种替代方法是使用引用参数“返回”:

代码语言:javascript
复制
void get(int, int&);
void get(int, char&);

虽然我可能会使用模板,或者像你的第二个例子一样使用不同名称的函数。

票数 10
EN

Stack Overflow用户

发布于 2013-07-12 17:31:25

你可以这样想:

您必须:

代码语言:javascript
复制
  int get(int);
  char get(int);

并且,在调用时不强制收集函数的返回值。

现在,您可以调用

代码语言:javascript
复制
  get(10);  -> there is an ambiguity here which function to invoke. 

因此,如果根据返回类型允许重载,则没有意义。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9568852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档