任何无法使用默认可变参数模板的原因

时间:2012-01-31 17:45:50

标签: c++

有人知道在无法为变量模板设置默认参数的决定背后是否有任何合理的理由?不难想象:

template<class T, class... Policies = Default_Policy>
class X
{
};

3 个答案:

答案 0 :(得分:2)

参数包中包含零的内容是有效的。编写X<T>Policies = {}Policies = {Default_Policy}时,编译器应该如何选择?

(并且您的语法不允许使用超过1项的默认值,但这只是语法。)

答案 1 :(得分:1)

当给出的参数数量可能不同时,使用默认参数似乎令人困惑。例如,在实例化模板时,如何告诉编译器您要使用此默认值?编译器如何知道你是否想要

X<T, Default_Policy>

X<T, Default_Policy, Default_Policy>

没有明确使用名称&#34; Default_Policy&#34;等?

这是(至少在我看来)不具备可变参数模板的默认参数的一个很好的理由。

答案 2 :(得分:0)

您不需要新的语言功能来拥有默认参数。专业化和模板别名就足够了。

template<template<typename...> class t, typename def, typename... a>
struct give_default {
  using type = t<a...>;
};
template<template<typename...> class t, typename def> 
struct give_default<t, def> {
  using type = t<def>;
};

template<typename... t>
using X_with_default = typename give_default<X, Default_Policy, t...>::type;