-1
誰能告訴我默認模板值的目的,在默認模板沒底
template <typename, typename = void, int...> struct foo {};
聲明foo<int, void, 5>
時將編譯,但foo<int, 5>
不會呢? 是不是typename = void
的目的,以便我們可以省略該條目,以便它默認爲void
?如果這樣的語法不被允許,那麼爲什麼有默認值呢?
誰能告訴我默認模板值的目的,在默認模板沒底
template <typename, typename = void, int...> struct foo {};
聲明foo<int, void, 5>
時將編譯,但foo<int, 5>
不會呢? 是不是typename = void
的目的,以便我們可以省略該條目,以便它默認爲void
?如果這樣的語法不被允許,那麼爲什麼有默認值呢?
由於參數包可以是空的,在這個例子中foo<int>
將被編譯。沒有默認參數,您明確需要foo<int, void>
。
如果'foo'足夠聰明,可以跳過默認值並進入'int ...',那將會更麻煩。在這種情況下,確保它很容易,但是一旦你試圖推廣它,你會遇到模棱兩可和其他併發症。 –
chris
混合默認模板參數和可變參數模板很困難。 – AndyG
很難用字面上的零上下文來說明爲什麼存在一段代碼。 – Barry