在非模板类中使用通用模板类

时间:2015-11-07 00:23:20

标签: c++ templates

我会粘贴一些代码,以便更好地解释我的问题。

所以,我将此class template称为Piece

template <typename T>
class Piece
{
public:
    Piece();
    ~Piece();
    //...
};

Piece可以有两个不同的结构:

Piece<TextureMap::TileTextureID>::Piece()
    : m_texture(TextureMap::TileTextureID::INIT)
{
}

Piece<TextureMap::MeepleTextureID>::Piece()
    : m_texture(TextureMap::MeepleTextureID::BLUE)
{
}

另外,我有一个class Foo,其中有一个bar方法,正如您所见,它通过Piece传递reference

template <typename T>
class Piece;

class Foo
{
public:
    Foo();
    ~Foo();

private:
    void bar(Piece& piece); //ERROR!!!!
    //...
};

问题:

我理解错误。我需要通过键入以下内容来指定Piece的类型:

(Piece<TextureMap::TileTextureID>& piece);

(Piece<TextureMap::MeepleTextureID>& piece);

但这里的问题是,我希望这是通用的。我不想指定要传递给Piece方法的bar哪种类型... 或者它是TitleTextureIDMeepleTextureID。它可以是这两个选项中的任何一个......但是(重要的)不要使Foo类也通用!

我怎样才能做到这一点?

错误:

error C2955: 'Piece' : use of class template requires template argument list

1 个答案:

答案 0 :(得分:1)

您只需将成员函数转换为成员函数模板即可。

template <typename T>
void bar(Piece<T>& piece);

这可以按照您期望的方式进行定义:

template <typename T>
void Foo::bar(Piece<T>& piece) { /* ... */ }