我有这两个类:
class IBaseA
{
public:
virtual bool sayHello(std::string&) = 0;
~IBaseA(){}
};
class BaseA: public IBaseA
{
public:
virtual bool sayHello(std::string &str)
{
std::cout << "Hello " << str << std::endl;
return (true);
}
BaseA(){}
};
你能解释一下为什么我不能做那样的事情吗
bool (IBaseA::*ptr)(std::string&) = &BaseA::sayHello;
错误:无法将 'bool (BaseA:: )(std::string&) {aka bool (BaseA:: )(std::basic_string&)}' 转换为 'bool (IBaseA:: )(std::string&) {aka bool (IBaseA:: )(std::basic_string&)}' 初始化
我不明白为什么我不能做这样的事情。
但是,如果我将作业更改为
bool (IBaseA::*ptr)(std::string&) = &IBaseA::sayHello;
那么我可以毫无问题地使用这个指针
BaseA A;
(A.*ptr)(str);
编辑:感谢您的回答,我在想,由于所有地址都在 vtable 中,根据我从维基百科的理解,它们是相同的位置。