2012-01-31 26 views
1

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

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

對不起,但這是嚴重不可讀的。 – 2012-01-31 17:52:55

回答

1

當給定的參數個數可能不同時,使用默認參數似乎令人困惑。例如,當實例化模板時,你如何告訴編譯器你想使用這個默認值?而編譯器怎麼會知道,如果你想

X<T, Default_Policy> 

X<T, Default_Policy, Default_Policy> 

沒有顯式使用名稱 「Default_Policy」 等?

這是(至少在我看來)一個很好的理由,沒有可變參數模板的默認參數。

2

參數包中包含零的東西是有效的。編寫程序時應如何選擇X<T>Policies = {}Policies = {Default_Policy}

(和你的語法不允許超過1項默認值,但是這只是語法)。

+0

「參數包」作爲一個術語是否真的存在來描述這個?它通常被稱爲?谷歌搜索沒有發現任何東西,我從來沒有聽說過。 – 2012-01-31 18:06:49

+2

@KonradRudolph:不知道它是否普遍,但它是正確的術語(n3290§14.5.3/ 3)。 – kennytm 2012-01-31 18:08:22

+0

#KennyTM它允許多個值:Policies = {P1,P2,P3} – smallB 2012-01-31 18:12:32

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; 
+0

#Pubby,哦,我明白了。正如你已經證明的那樣,我正在尋找一些瘋狂且不可讀的語法(Policy = {P1,P2,P3}),卻沒有意識到這種簡單/更好/更自然的alrady存在。我感到非常愚蠢。 – smallB 2012-02-01 06:55:57