// Penguin.h
#include <map>
#include <iostream>
class Penguin
{
typedef void (Penguin::*PenguinMet)();
std::map<int, PenguinMet> Methods;
void Move();
int p;
public:
Penguin();
void Walk();
};
Penguin::Penguin()
{
p = 0;
Methods[0] = &Penguin::Move;
}
void Penguin::Move()
{
std::cout << p << std::endl;
}
void Penguin::Walk()
{
this->*Methods[p];
*this.*Methods[p];
}
和这个主要()
// Main.cpp
#include "Penguin.h"
int main()
{
Penguin Tux;
Tux.Walk();
return 0;
}
但是当我运行它时, p 永远不会打印出来。
我做错了什么?
由于
答案 0 :(得分:4)
你实际上并没有调用函数,你只是将成员函数指针的值看作一个void表达式,它没有任何效果。将Penguin::Walk
更改为:
void Penguin::Walk()
{
(this->*Methods[p])();
(*this.*Methods[p])();
}
这样你实际上调用了方法并传入了正确的参数(在这种情况下为零参数)。请注意,您需要额外的括号,因为函数调用的优先级高于->*
和.*
运算符。
答案 1 :(得分:0)
那是因为你从不打电话给这个功能。
void Penguin::Walk()
{
this->*Methods[p];
*this.*Methods[p];
}
该功能无效。
void Penguin::Walk()
{
(this->*Methods[p])();
(*this.*Methods[p])();
}
该函数调用该东西两次。