3

所以这就是我想做的事情:我使用std::pair,但我肯定想使用元组做同样的事情,或者实际上几乎任何类型的模板。分配对变量时,我需要输入如下内容:

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

有没有办法<T1,T2>在创建新对时省略第二个,让编译器猜测,或者使用 X 的类型(我显然试图创建一个pair<T1,T2>)或t1t2的类型(我正在使用一个T1对象和一个T2对象,我想要的那对有可能是类型pair<T1,T2>)?

4

3 回答 3

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 };
于 2012-08-30T08:38:48.127 回答
4

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

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

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

X = {t1, t2};

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

auto X = std::make_pair(t1, t2);
于 2012-08-30T08:39:05.957 回答
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::tuplestd::make_tuple

于 2012-08-30T08:38:38.080 回答