我在这里读到的关于这个话题的问题很少,这对我来说似乎仍然令人困惑。我刚刚开始学习C++,还没有学习过模板或者操作符重载之类的东西。
现在有没有一种简单的重载方法?
class My {
public:
int get(int);
char get(int);
}
没有模板或奇怪的行为?或者我应该干脆
class My {
public:
int get_int(int);
char get_char(int);
}
发布于 2012-03-05 23:21:01
这是可能的,但我不确定这是一种我推荐给初学者的技术。与其他情况一样,当您希望函数的选择取决于返回值的使用方式时,可以使用代理;首先定义像getChar
和getInt
这样的函数,然后定义返回代理的通用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();
}
};
根据需要将其扩展到任意多个类型。
发布于 2012-03-05 23:08:18
不,您不能通过返回类型重载;只能通过参数类型和常量/易失性限定符进行重载。
一种替代方法是使用引用参数“返回”:
void get(int, int&);
void get(int, char&);
虽然我可能会使用模板,或者像你的第二个例子一样使用不同名称的函数。
发布于 2013-07-12 17:31:25
你可以这样想:
您必须:
int get(int);
char get(int);
并且,在调用时不强制收集函数的返回值。
现在,您可以调用
get(10); -> there is an ambiguity here which function to invoke.
因此,如果根据返回类型允许重载,则没有意义。
https://stackoverflow.com/questions/9568852
复制相似问题