我知道很多关于模板默认参数语法的问题。
通常,答案(与我对它应该如何工作的理解同步)是使用类似的东西:
template <class T = SomeDefault> class T1 {};
最近我想检查Boost在mapped_vector
中使用哪个地图实现。并找到以下代码段:
template<class T, class A>
class mapped_vector:
显然,参数A
没有默认绑定,但显然,我可以实例化一个mapped_vector<int>
。很明显,默认参数是以某种方式推断出来的,但是如何?
编辑:准确地说,我在讨论this file
中的第279行答案 0 :(得分:6)
行here(@ Xeo的链接)声明模板。 链接中的行定义。注意:如果您决定申报,则不能在定义中再次指定 a 默认值。
这有效:( Boost的版本)
template<typename T = int> class A;
template<typename T> class A {};
template<typename T = bool> class A;
template<typename T = int> class A {};
template<typename T = int> class A;
template<typename T = int> class A {};
请注意,您必须在 之一中声明它。 This works:
template<typename T> class A;
template<typename T = int> class A {};
虽然默认值只能声明一次,但它们不必全部在同一部件中声明。 This works,但请不要这样做:
template<class T, class U = bool> class A;
template<class T = int, class U> class A {};
......没有限制,真的。 This works :(责怪 - 或者谢谢 - @Xeo)
template<class T, class U, class V = double> class A;
template<class T, class U = bool, class V> class A;
template<class T = int, class U, class V> class A {};
当然,你不会被迫提出声明。 This works:
template<typename T = int> class A {};