有谁知道是否有任何明智的理由背后的决定,不能有可变参数模板的默认参数?不难想象:任何不能有默认可变参数模板的原因
template<class T, class... Policies = Default_Policy>
class X
{
};
有谁知道是否有任何明智的理由背后的决定,不能有可变参数模板的默认参数?不难想象:任何不能有默认可变参数模板的原因
template<class T, class... Policies = Default_Policy>
class X
{
};
当给定的参数个数可能不同时,使用默认参数似乎令人困惑。例如,当实例化模板时,你如何告诉编译器你想使用这个默认值?而编译器怎么会知道,如果你想
X<T, Default_Policy>
或
X<T, Default_Policy, Default_Policy>
没有显式使用名称 “Default_Policy” 等?
这是(至少在我看来)一个很好的理由,没有可变参数模板的默认参数。
参数包中包含零的东西是有效的。编写程序时应如何选择X<T>
:Policies = {}
或Policies = {Default_Policy}
?
(和你的语法不允许超过1项默认值,但是这只是语法)。
你并不需要一个新的语言功能,具有默认参数。专业化和模板别名就足够了。
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;
#Pubby,哦,我明白了。正如你已经证明的那样,我正在寻找一些疯狂且不可读的语法(Policy = {P1,P2,P3}),却没有意识到这种简单/更好/更自然的alrady存在。我感到非常愚蠢。 – smallB 2012-02-01 06:55:57
对不起,但这是严重不可读的。 – 2012-01-31 17:52:55