函数/方法重载C:数据类型混淆?

我在C中有一些麻烦重载方法.
作为一个问题的例子,我有一个类,其中有多个方法被重载,每个方法都有一个具有不同数据类型的参数.
我的问题:这些方法应该出现在类中的特定顺序,以确保根据其参数数据类型调用正确的方法
class SomeClass{
    public:
    ...
    void Method(bool paramater);
    void Method(std::string paramater);
    void Method(uint64_t paramater);
    void Method(int64_t paramater);
    void Method(uint8_t paramater);
    void Method(int8_t paramater);
    void Method(float paramater);
    void Method(double paramater);
    void Method(ClassXYZ paramater);
}

我注意到有问题,因为运行时:

Method("string");

它正在呼唤:

Method(bool paramater);

解决方法

订单没有区别.通过分析参数的类型并将它们与参数的类型进行匹配来选择调用方法.如果没有完全匹配,则选择最佳匹配方法.在你的情况下,恰好是布尔方法.

您提供的类型为const char [7]的参数.根据C超载规则,这里的最佳路径是让const char [7]衰减到const char *,然后使用标准转换将其转换为bool.转换为std :: string的路径被认为更糟,因为它将涉及从const char *到std :: string的用户定义转换.通常,用户定义的转换会失去对标准转换的过载解决过程.这也是你的情况发生了.

如果您需要在这里调用std :: string版本,请为const char * type提供一个显式重载,并通过将参数转换为std :: string类型明确地委派给std :: string版本的调用

void Method(const char *paramater /* sic! */)
{
  Method(std::string(paramater));
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...