假设我有这门课程:
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解决了它。
答案 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);
康复,是的,但它是明确的。