// 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が印刷されることはありません。私は間違っていますか?あなたが実際に関数を呼び出していない
おかげ
ありがとう、ところで(* this。* Methods [p])();動作しません、私はアクセス違反エラーが発生します。何ができるか知っていますか? – kevinz
@levin: '(* this。* methods [p])()'は '(this - > * Methods [p])()'と意味的に同じです。それがsegfaultする唯一の理由は、 'p'がマップ内にまだ存在しない場合です。したがって、' operator 'はデフォルト値のNULLを挿入して、逆参照します。しかし、その場合、両方のメソッド呼び出しが重複します。 –