防止模板参数隐式转换

时间:2013-07-19 17:04:15

标签: c++ templates

如果我有这段代码:

std::pair<Class1*,std::string> myFunc()
{
  ... 
  return std::make_pair(m_myptr, m_mystr);
}

如何使用指向Class1和std :: string的指针强制返回std :: pair?我不希望发生任何隐式转换。由于此处推导出模板参数,我该如何强制执行?

使用

简单地说明参数
return std::make_pair<Class1*,std::string>(m_myptr, m_mystr);

在VS2012中抛出错误

1 个答案:

答案 0 :(得分:3)

make_pair的唯一目的是推导pair的模板参数类型。如果您已经确切知道所需的pair类型,请直接初始化,而不是调用make_pair

return std::pair<Class1*,std::string>(m_myptr, m_mystr);

或(C ++ 11):

return {m_myptr, m_mystr};