我会粘贴一些代码,以便更好地解释我的问题。
所以,我将此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
哪种类型...
或者它是TitleTextureID
或MeepleTextureID
。它可以是这两个选项中的任何一个......但是(重要的)不要使Foo类也通用!
我怎样才能做到这一点?
错误:
error C2955: 'Piece' : use of class template requires template argument list
答案 0 :(得分:1)
您只需将成员函数转换为成员函数模板即可。
template <typename T>
void bar(Piece<T>& piece);
这可以按照您期望的方式进行定义:
template <typename T>
void Foo::bar(Piece<T>& piece) { /* ... */ }