不能推导模板参数

Template argument cannot be deduced

本文关键字:参数 不能      更新时间:2023-10-16

我试图使用std::transform将两个大小相等的向量合并为一对向量。

int main()
{
    vector<string> names;
    // fill it with names    
    vector<int> nums;
    // fill it with numbers
    typedef pair<int,string> Pair_t;
    vector<Pair_t> pv;
    transform(nums.begin(), nums.end(),
              names.begin(), back_inserter(pv),
              make_pair<int,string>);
}

VC10给我:

'_OutIt std::transform(_InIt1,_InIt1,_InIt2,_OutIt,_Fn2)' : could not deduce template argument for '_OutIt' from 'std::back_insert_iterator<_Container>'
          with
          [
              _Container=std::vector<Pair_t>
          ]

那么为什么不能推导出template实参呢?我该如何修复它?

这是由于VC10当前版本中的一个错误,无法正确解决make_pair的过载。

这里有一个关于这个确切问题的讨论,以及使用VC10支持的c++ 0x lambda表达式的解决方案。