如何解决参数中默认构造函数导致的模糊函数重载问题

时间:2009-09-28 20:11:24

标签: c++ gcc g++

假设我有这门课程:

class Foo {
public:
   void member(std::string s);
   void member(int64_t &n);
};

现在我想做一些像

这样的事情
int64_t value = 5;
Foo f;
f.member(value);

问题在于编译器(至少是GCC)变得困惑&我相信我正在尝试使用char *构造函数使用字符串调用成员:

invalid conversion from 'int64_t' to 'const char*

如何在不更改方法签名的情况下调用我想要的实际成员函数?模板是唯一的解决方案吗?我在没有任何帮助的情况下尝试过施放(这应该无关紧要,因为类型已经明确无误)。


抱歉 - 发现了错误。

宣言是:

class Foo {
public:
    void member(std::string s);
    void member(int64_t &n);
};

删除by-ref解决了它。

3 个答案:

答案 0 :(得分:5)

将参数转换为与所需重载的参数类型完全匹配:

f.member((int64_t) value);

答案 1 :(得分:0)

抱歉 - 发现了错误。

宣言是:

class Foo {
public:
   void member(std::string s);
   void member(int64_t &n);
};

删除by-ref解决了它。

答案 2 :(得分:-1)

可能有更简单的方法来解决这个问题(比如使用参数转换),但我看到的解决方案如下所示:

void (Foo::*memberProc)(int64_t) = &Foo::member;

Foo f;
((f).*(memberProc))(5);

康复,是的,但它是明确的。