gpt4 book ai didi

c++ - 默认模板参数如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:53 24 4
gpt4 key购买 nike

我知道关于模板默认参数语法的问题已经被问了很多。

通常,答案(与我对它应该如何工作的理解同步)是使用类似的东西:

template <class T = SomeDefault> class T1 {};

最近我想检查 Boost 在其 mapped_vector 中使用了哪个 map 实现.并找到以下片段:

template<class T, class A>
class mapped_vector:

显然,参数 A 没有默认绑定(bind),而且显然,我可以实例化一个 mapped_vector<int>正好。显然,默认参数是以某种方式推断出来的,但是如何推断出来的呢?

编辑:准确地说,我说的是 this file 中的第 279 行

最佳答案

here (@Xeo 的链接)声明 模板。您链接中的行定义它。注意:如果您决定要声明,则不能在定义中再次指定默认值。

这有效:(Boost 的版本)

template<typename T = int> class A;
template<typename T> class A {};

This won't work :

template<typename T = bool> class A;
template<typename T = int> class A {};

This neither :

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 {};

关于c++ - 默认模板参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24281159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com