我将在下面粘贴一些代码以更好地解释我的问题。
所以,我有这个名为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
>引用
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);
但这里的问题是,我希望它是通用的。我不想指定要传递给 bar
方法的 Piece
类型...
或者它是 TitleTextureID
或 MeepleTextureID
。它可以是这两个选项中的任何一个...但是(重要)不要使 Foo 类也通用!
我怎样才能做到这一点?
错误:
error C2955: 'Piece' : use of class template requires template argument list
最佳答案
您只需将成员函数制作成成员函数模板即可。
template <typename T>
void bar(Piece<T>& piece);
这可以按照您期望的方式定义:
template <typename T>
void Foo::bar(Piece<T>& piece) { /* ... */ }
关于c++ - 在非模板类中使用通用模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577651/