正在阻止模板参数隐式转换

Preventing template arguments implicit conversion

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

如果我有这个代码:

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

如何强制返回带有指向Class1的指针和std::字符串的std::对?我不希望发生任何隐含的转换。既然模板参数是在这里推导出来的,我该如何强制执行呢?

用简单解释参数

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

正在引发VS2012 错误

make_pair的唯一目的是推导pair的模板参数类型。如果你已经知道你想要的pair的确切类型,直接初始化它,而不是调用make_pair:

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

或(C++11):

return {m_myptr, m_mystr};