2017-10-12 89 views
-1

誰能告訴我默認模板值的目的,在默認模板沒底

template <typename, typename = void, int...> struct foo {}; 

聲明foo<int, void, 5>時將編譯,但foo<int, 5>不會呢? 是不是typename = void的目的,以便我們可以省略該條目,以便它默認爲void?如果這樣的語法不被允許,那麼爲什麼有默認值呢?

+0

如果'foo '足夠聰明,可以跳過默認值並進入'int ...',那將會更麻煩。在這種情況下,確保它很容易,但是一旦你試圖推廣它,你會遇到模棱兩可和其他併發症。 – chris

+0

混合默認模板參數和可變參數模板很困難。 – AndyG

+0

很難用字面上的零上下文來說明爲什麼存在一段代碼。 – Barry

回答

2

由於參數包可以是空的,在這個例子中foo<int>將被編譯。沒有默認參數,您明確需要foo<int, void>