65,186
社区成员




#pragma once
#include <vector>
using namespace std;
class Mouse;
class Cat
{
private:
typedef void(Mouse::*CatMiaow)();
public:
Cat();
~Cat();
static struct OnCatMiaow
{
CatMiaow catMiaow;
Mouse* Mouse;
};
vector<OnCatMiaow> vec_OnCatMiaow;
void Miaow();
};
#include "Cat.h"
#include <iostream>
Cat::Cat()
{
}
Cat::~Cat()
{
}
void Cat::Miaow()
{
vector<OnCatMiaow>::iterator it = vec_OnCatMiaow.begin();
for (it; it != vec_OnCatMiaow.end(); it++)
{
(it->Mouse->*it->catMiaow)();
//(vec_OnCatMiaow[i].Mouse->*vec_OnCatMiaow[i].catMiaow)();
}
}
#pragma once
class Cat;
class Mouse
{
public:
Mouse();
~Mouse();
void EnterOnCatMiaow(Cat *cat);
void MouseRun();
};
#include "Mouse.h"
#include "Cat.h"
#include <iostream>
Mouse::Mouse()
{
}
Mouse::~Mouse()
{
}
void Mouse::EnterOnCatMiaow(Cat *cat)
{
cat->vec_OnCatMiaow.push_back({ &Mouse::MouseRun, this });
//Cat::OnCatMiaow *tmpStruct = new Cat::OnCatMiaow();
//tmpStruct->catMiaow = &Mouse::MouseRun;
//tmpStruct->Mouse = this;
//cat->vec_OnCatMiaow.push_back(tmpStruct);
//错误: 无法将参数 1 从“Cat::OnCatMiaow *”转换为“Cat::OnCatMiaow &&”
}
void Mouse::MouseRun()
{
std::cout << "老鼠跑了" << endl;
}
#include <iostream>
#include <windows.h>
#include "Cat.h"
#include "Mouse.h"
using namespace std;
int main()
{
Cat cat1 = Cat();
Mouse mouse1 = Mouse();
mouse1.EnterOnCatMiaow(&cat1);
cat1.Miaow();
return 0;
}