2017-10-12 88 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>