使用模板时键入推断

时间:2012-08-30 08:36:31

标签: c++ templates types inference

所以这就是我想要做的事情:我使用std::pair,但我肯定会喜欢使用元组,或者几乎任何类型的模板。在分配一对变量时,我需要输入类似的内容:

T1 t1;
T2 t2;
std::pair<T1,T2> X;
X = std::pair<T1,T2> (t1, t2);

有没有办法在创建新对时省略第二个<T1,T2>,让编译器猜测,或者使用X&#39;类型(我显然试图创建一个{{1} }}或pair<T1,T2>t1的类型(我正在构建一个带有t2对象和T1对象的对,有可能这对我想要的是类型T2)?

3 个答案:

答案 0 :(得分:4)

是的,请使用std::make_pair

std::pair<T1,T2> X;
// some code
X = std::make_pair( t1, t2 );

或者,如果您可以直接初始化它:

std::pair<T1,T2> X = std::make_pair( t1, t2 ); // OR, even better:
std::pair<T1,T2> X( t1, t2 ); 

对于C ++ 11,初始化甚至更好:

auto X = std::make_pair( t1, t2 );

作业相同:

X = std::make_pair( t1, t2 );

但它也可能是:

X = { t1, t2 };

答案 1 :(得分:4)

是的,但模板参数推导仅适用于函数模板,而不适用于类模板的构造函数。因此,库提供了一个函数:

X = std::make_pair(t1, t2);

在C ++ 11中,可以初始化配对和元组,并从初始化列表中分配:

X = {t1, t2};

auto可用于从初始化程序中自动指定类型,因此您根本不需要指定模板参数:

auto X = std::make_pair(t1, t2);

答案 2 :(得分:3)

std::pair<T1,T2> X = std::make_pair(t1, t2);

C++11

std::pair<T1, T2> X = {t1, t2};

C++11

auto X = std::make_pair(t1, t2);

std::tuple还有std::make_tuple