【发布时间】:2022-01-19 20:09:41
【问题描述】:
我有一个简单的接口设置器:
template<typename Interface>
struct FrontEnd
{
virtual void inject(Interface*& ptr, Client* client) = 0;
}
我想通过这样的参数包来实现这些接口:
template<typename ... Is>
struct BackEnd : public FrontEnd<Is>...
{
void inject(Is*& ptr, Client* client) override
{
ptr = someStuff<Is>.get(client);
}
};
但是,parameter pack not expanded with '...' 失败了。我在cppref 中找不到类似的东西。我不知道扩展位点应该去哪里(假设这甚至是合法的,我倾向于不这样做)。 知道如何为参数包中的每种类型提供覆盖吗?
【问题讨论】:
-
FrontEnd 只接受一个接口模板参数,因此无论如何您都不能在继承中使用参数包。那你想做什么?无论如何,将模板与虚函数混合并不是我真正推荐的。 stackoverflow.com/questions/2354210/…)
-
@PepijnKramer,第一个 ... 正在扩展 FrontEnd
所以对于每个 Is,BackEnd 都有一个应该能够覆盖的基类 -
@PepijnKramer 我已经知道虚方法不能被模板化,事实上,
inject不是方法模板 -
对不起,我错过了,我回答得太快了。
-
有一份详尽的允许扩展位点列表,而您想要的却不存在。
标签: c++ c++17 variadic-templates parameter-pack