繁体   English   中英

如何在C ++中使一个模糊的调用变得明显?

[英]How to make an ambiguous call distinct in C++?

void outputString(const string &ss) {
    cout << "outputString(const string& ) " + ss << endl;
}

void outputString(const string ss) {
    cout << "outputString(const string ) " + ss << endl;
}

int main(void) {
    //! outputString("ambigiousmethod"); 
    const string constStr = "ambigiousmethod2";
    //! outputString(constStr);
} ///:~

如何进行明确的通话?

编辑 :这段代码可以用g ++和MSVC编译。

谢谢。

C ++不允许重载函数,其中函数签名的唯一区别是一个接受一个对象而另一个接受一个对象。 所以类似于:

void foo(int);

void foo(int&);

不被允许。

您需要更改参数的数量和/或类型。

在您的情况下,接受reference的函数,如果要允许函数更改其参数,则可以使其接受pointer

您可以更改其中一种方法的签名。 它可能看起来不漂亮,但这是最简单的方法。

所以你原则上可以

void outputString(const string &ss, int notneeded) {
    cout << "outputString(const string& ) " + ss << endl;
}

void outputString(const string ss) {
    cout << "outputString(const string ) " + ss << endl;
}

当你想调用第一个函数时,只需调用它:

outputString("ambigiousmethod", 0);

这将导致区分呼叫。

没有其他方法(我希望在这个方面被证明是错误的)因为C ++不允许重载,其中传递(通过值或通过引用)是签名的唯一区别。

编辑:正如bzabhi所指出的,您还可以通过更改指针的引用来更改签名。 在您提供的示例中,您可能需要在某些情况下更改功能代码。

根据你的代码,你只需要

void outputString(const string &ss).

因为两个方法都不能将参数更改为调用者(因为它是const引用或按值传递)。

你为什么需要这两种方法?

我建议使用技术,为每个函数赋予一个唯一的名称。即,不要使用语法重载。 我已经使用它多年了,我只发现它的优点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM