模板特化 - >错误:非模板结构'GameObjectImpl'的显式特化

时间:2018-04-17 22:52:03

标签: qt c++11 templates

我正在写一个游戏&我有一个名为GameObject的界面 这个游戏对象是由行星,彗星,小行星等派生对象实现的。现在我需要在不同函数中使用这些对象的type_index。

为了达到这个目的,我在GameObject&中定义了虚函数。想要使用带有派生类类型的模板模式。不幸的是我收到了错误  错误:非模板结构'GameObjectImpl'的显式特化 template struct GameObjectImpl:GameObject                                  ^

以下是源代码

struct GameObject
{
    virtual ~GameObject() = default;
    virtual type_index type() const = 0;
};
template <typename T> struct GameObjectImpl<T> : GameObject //error
{
    type_index type() const override
    {
        return typeid(T);
    }
};

struct Planet : GameObjectImpl<Planet>{};
struct Asteriod : GameObjectImpl<Asteriod>{};

你能告诉我如何摆脱这个错误。请注意我正在学习模板模式所以只想使用模板

2 个答案:

答案 0 :(得分:0)

要专门化模板,必须存在一个要专门化的模板:

template <typename T>
struct GameObjectImpl {

};

请注意,如果您要专门化类模板,则还必须专门化所有成员函数

答案 1 :(得分:0)

这是模板

template <typename T> 
  struct GameObjectImpl : 
    GameObject 

这是模板专业化

template <typename T> 
  struct GameObjectImpl<T> : 
    GameObject

那可能不是有效的专业化(它似乎没有专门化任何东西)。语法GameObjectImpl<T>要求已在某处定义了名为GameObjectImpl的模板。

很可能您想定义一个模板,而不是模板专门化。