我有一个带有这样签名的类方法:
// someheader.h
class Blah {
...
void DoSomeWork(class Screen& p);
..
};
Run Code Online (Sandbox Code Playgroud)
然而,Screen类应该现在变成一个模板,比如...
template <int width, int height>
class Screen {
...
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何在someheader.h中更改方法的原型?
Geo*_*che 10
Screen不是一个定义的类型,只有一个Screen<int,int>.
由于您希望将模板化类型作为参数,因此需要将其设置为函数模板.有了它,您可以命名参数类型:
class Blah
{
public:
template<int width, int height>
void DoSomeWork(Screen<width,height>& p);
};
Run Code Online (Sandbox Code Playgroud)
由于DoSomeWork在Screen是模板之前就已存在,因此可能不需要知道Screen现在是模板.因此,您可以拥有一个ScreenBase类来定义DoSomeWork所需的API,而Screen继承自:
class ScreenBase { ... };
class Blah {
DoSomeWork(const ScreenBase& s) { ... }
};
template <int width, int height>
class Screen : public ScreenBase
{
...
};
Run Code Online (Sandbox Code Playgroud)