Код: Выделить всё
#ifndef CHAMBER_H
#define CHAMBER_H
#include
#include
class FoodChamber;
template
class Chamber
{
friend Chamber;
protected:
const inline static std::string m_idPrefix = ChamberType::m_idPrefix;
inline static int ChamberTypeCount = 0;
int m_logicalId = ChamberTypeCount++;
std::string m_displayId = "";
public:
inline static std::map ADJACENCY_LIST = {}; // Chamber : its neighbours.
void AddEdge(Chamber *firstChamber, Chamber *secondChamber)
{
std::vector& neighbourChambers = ADJACENCY_LIST[firstChamber];
for (Chamber* neighbourChamber : neighbourChambers){
if (neighbourChamber == secondChamber) return;
}
neighbourChambers.push_back(secondChamber);
}
std::string getDisplayId()
{
return m_displayId;
}
Chamber(){
m_displayId = m_idPrefix+std::to_string(m_logicalId);
}
virtual void display() const = 0;
};
#endif // CHAMBER_H
Код: Выделить всё
#ifndef ANTHILL_H
#define ANTHILL_H
#include
#include "Chamber.h"
class AntHill
{
private:
std::map m_chambersRegister = {};
public:
AntHill();
void addChamber(Chamber* chamber);
void addEdge(Chamber* firstChamber, Chamber* secondChamber);
void display();
};
#endif // ANTHILL_H
Как мне это сделать? Желательно без удаления CRTP, так как в противном случае в функции идентификатора мне придется реализовать огромный if или переключиться на назначение идентификатора на основе типа.
Подробнее здесь: https://stackoverflow.com/questions/798 ... which-type
Мобильная версия