模板类型在构造对象时,可以根据聚合参数直接推导出模板参数:
#include <string>
#include <iostream>
using namespace std;
template<class T>
class D
{
public:
T m_d1;
int m_d2;
};
template<class T>
class U
{
public:
D<T> m_d;
T m_d3;
};
int main()
{
D d{"hello", 666};
U u{{"hi", 88}, "bye"};
U<string> uu{"hi", 88, "bye"};
return 0;
}
可以看到类型D的对象d可以直接通过构造参数推导出模板类型参数
构造类型U需要先构造D所以通过{"hi", 88}先推导D的类型,从而完成U的对象的构造
U<string> uu显示的指定了模板参数,所以可以直接构造,不需要聚合参数推导