1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template <typename Component>
class ComponentManager : public IObject {
template <typename Component>
friend Component* AddComponent(const ObjectID objID);
template <typename Component>
friend void RemoveComponent(const ObjectID objID);
template <typename Component>
friend Component* GetComponent(const ObjectID objID);
template <typename Component>
friend Component* HasComponent(const ObjectID objID);
public:
ComponentManager();
virtual ~ComponentManager();
private:
std::unordered_map<ObjectID, Component*> m_ComponentHash;
};
cs

기존에 있던 코드 잘못올려서 다시 올렸음(하단)
1
2
3
4
5
6
template <typename Component>
inline __declspec(dllexport) ComponentManager<Component>& GetComponentManager() {
    static ComponentManager<Component> s_ComponentManager;
    return s_ComponentManager;
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename Component>
inline __declspec(dllexport) bool HasComponent(const ObjectID objID) {
ComponentManager<Component>& componentManager = GetComponentManager<Component>();
bool result = false;
if (componentManager.m_ComponentHash.count(objID) > 0) {
result = true;
}
if (componentManager.m_ComponentHash[objID] == nullptr) {
DebugBreak();
}
return result;
}
cs

Error C2248 'ComponentManager<Component>::m_ComponentHash': cannot access private member declared in class 'ComponentManager<Component>'

ComponentManager에서 friend로 해줬는데 왜 멤버로 접근을 못한다는건지 이해가 안됨... 템플릿에서 사용하는건 다름?