覆盖参数包声明和扩展位点

lur*_*her 2 c++ variadic-templates c++17 parameter-pack

我有一个简单的界面设置器:

template<typename Interface>
struct FrontEnd
{
  virtual void inject(Interface*& ptr, Client* client) = 0;
}
Run Code Online (Sandbox Code Playgroud)

我想通过这样的参数包来实现这些接口:

template<typename ... Is>
struct BackEnd : public FrontEnd<Is>...
{
   void inject(Is*& ptr, Client* client) override
   {
      ptr = someStuff<Is>.get(client);
   }
};
Run Code Online (Sandbox Code Playgroud)

然而,这失败了parameter pack not expanded with '...'我在cppref中找不到类似的东西。我不知道扩展基因座应该去哪里(假设这甚至是合法的,我倾向于不合法)。知道如何为参数包中的每种类型提供覆盖吗?

n. *_* m. 5

你可能想要这样的东西

  template<typename Is>             
  struct OneBackEnd : public FrontEnd<Is>
  {                                 
     void inject(Is*& ptr, Client* client) override { /* whatever */ }
  };                                
                                    
  template<typename ... Is>         
  struct BackEnd : public OneBackEnd<Is>...
  {                                 
      using OneBackEnd<Is>::inject...;
  };                       
Run Code Online (Sandbox Code Playgroud)