#include <iostream>
using namespace std;
int Add(int a, int b) {
return a + b;
}
int Sub(int a, int b) {
return a - b;
}
class Item {
public:
Item() : _itemId(0), _rarity(0), _owerId(0) {
}
public:
int _itemId;
int _rarity;
int _owerId;
};
typedef bool(ITEM_SELECTOR)(Item*, int);
Item* FindItem(Item items[], int itemCount,
ITEM_SELECTOR* selector,int value)
{
for (int i = 0;i < itemCount;i++) {
Item* item = &items[i];
if (selector(item,value)) {
return item;
}
}
return nullptr;
}
bool IsRareItem(Item* item,int value) {
return item->_rarity >= value;
}
bool IsOwnerItem(Item* item, int ownerId) {
return item->_owerId == ownerId;
}
int main()
{
int a = 10;
typedef int DATA;
DATA* pointer = &a;
typedef int(FUNC_TYPE)(int a, int b);
FUNC_TYPE* fn;
fn = Add;
fn = Sub;
int result = Add(1, 2);
int result2 = fn(1, 2);
int result3 = (*fn)(1, 2);
cout << result << endl;
cout << result2 << endl;
cout << result3 << endl;
Item items[10] = {};
items[3]._rarity = 2;
items[3]._itemId = 3;
items[4]._owerId = 100;
items[4]._itemId = 4;
Item* rareItem = FindItem(items, 10, IsRareItem, 2);
Item* ownerItem = FindItem(items, 10, IsOwnerItem, 100);
cout << rareItem->_itemId<<endl;
cout << ownerItem->_itemId << endl;
return 0;
}