【发布时间】:2016-09-09 02:00:02
【问题描述】:
我正在使用可变参数包进行基于策略的类设计。
template <APITypes APIType, class... Policies>
class IShader : public Policies... {
};
策略在调用时定义,如果未指定,则使用默认值。当我需要添加另一个可变参数包时,问题就来了:
template <AttributeType... Attributes, APITypes APIType, class... Policies>
class IShader : public Policies... {
};
这会导致错误“模板参数包必须是最后一个模板参数”。我计划使用属性包来更改至少一项策略的行为。但我不知道如何在一个模板类中获取两个可变参数包。
【问题讨论】:
-
你不能。您需要重新考虑您的模板/类设计。
-
甚至没有某种间接?为属性列表说某种包装器。还是模板的模板?
-
你总是可以考虑像
IShader<Attributes<A1, A2>, APIType, Policies<P1, P2>> -
有点像你无法定义
void foo(int numAttributes, ..., int numPolicies, ...); -
@chris 这是调用时的样子吗?我尝试使用围绕属性的包装器进行类似的操作,但无法弄清楚如何将所述包装器放入模板中或使列表可供需要它的策略访问。
标签: c++ c++14 variadic-templates