C++ Library Extensions 2022.12.09
To help learn modern C++ programming
member_predicate.cpp
Go to the documentation of this file.
1#include <iostream>
2
3class Engine
4{
5 public:
6
8
9 using predicate_t = bool (Engine::*)(GameState, GameState) const;
10
11 public:
12
14 (Engine* pEngine, predicate_t Pred,
15 GameState state_1, GameState state_2)
16 {
17 std::cout << "Object is pointer" << std::endl;
18
19 bool state = (pEngine->*Pred)(state_1, state_2);
20 if(state == true)
21 {
22 // pause
23 }
24 else
25 {
26 // resume
27 }
28 }
29
31 (Engine& engine, predicate_t Pred,
32 GameState state_1, GameState state_2)
33 {
34 std::cout << "Object is reference" << std::endl;
35
36 auto state = (engine.*Pred)(state_1, state_2);
37 if(state == true)
38 {
39 // pause
40 }
41 else
42 {
43 // resume
44 }
45 }
46
47 //bool (Engine::*)(GameState, GameState) const;
48 bool predicate_1(GameState state1, GameState state2) const
49 {
50 return state1 == state2;
51 }
52
53 bool predicate_2(GameState state1, GameState state2) const
54 {
55 return state1 != state2;
56 }
57};
58
59int main()
60{
61 Engine e, a, b;
62
63 e.ToggleState(e, &Engine::resume,
64 Engine::GameState::Pause, Engine::GameState::Resume);
65
66 e.ToggleState(&a, &Engine::pause,
67 Engine::GameState::Pause, Engine::GameState::Resume);
68
69}
auto & cout
auto & endl
bool predicate_2(GameState state1, GameState state2) const
void ToggleState(Engine &engine, predicate_t Pred, GameState state_1, GameState state_2)
bool(Engine::*)(GameState, GameState) const predicate_t
void ToggleState(Engine *pEngine, predicate_t Pred, GameState state_1, GameState state_2)
bool predicate_1(GameState state1, GameState state2) const
int main()