我不明白为什么我无法定义这个结构:
//Class.h
template <class T>
struct Callback {
T* Object;
std::function<void()> Function;
};
template <class T>
struct KeyCodeStruct {
typedef std::unordered_map<SDL_Keycode, Callback<T>> KeyCode;
};
template <class T>
struct BindingStruct{
typedef std::unordered_map<int, KeyCodeStruct<T>> Binding;
};
class Class {
public:
template <class T>
void bindInput(SDL_EventType eventType, SDL_Keycode key, Callback<T> f);
private:
template <class T>
BindingStruct<T> inputBindings; //How do I define this? This gives me an error.
}
它给出了错误:
Member 'inputBindings' declared as a template.
我不太了解模板,所以我可能只是错过了我需要的信息。
更新(回应deviantfan)
现在我的cpp类遇到了我所拥有的函数的问题。
template <class T>
void InputManager::bindInput(SDL_EventType eventType, SDL_Keycode key, Callback<T> f)
{
inputBindings[eventType][key] = f;
}
它表示期望的类或命名空间。
答案 0 :(得分:6)
错:
class Class {
private:
template <class T>
BindingStruct<T> inputBindings;
}
右:
template <class T>
class Class {
private:
BindingStruct<T> inputBindings;
}
答案 1 :(得分:4)
回应您的更新
如果您将类定义为类模板,请执行以下操作:
template <class T>
class InputManager
{
...
};
然后在您的定义中,您需要显示InputManager
是一个类型为T
的实例化:
template <class T>
void InputManager<T>::bindInput(SDL_EventType eventType, SDL_Keycode key, Callback<T> f)
{
inputBindings[eventType][key] = f;
}
ie:注意InputManager<T>
而不仅仅是InputManager