将模板类作为方法的参数传递

1 c++ templates

我有一个带有这样签名的类方法:

// 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)


Xav*_*det 5

由于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)