所以这就是我想要做的事情:我使用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
)?
答案 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
。