有誰知道是否有任何明智的理由背後的決定,不能有可變參數模板的默認參數?不難想象:任何不能有默認可變參數模板的原因
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