C++ 防止模板参数隐式转换

C++ 防止模板参数隐式转换,c++,templates,C++,Templates,如果我有此代码: std::pair<Class1*,std::string> myFunc() { ... return std::make_pair(m_myptr, m_mystr); } std::pair myFunc() { ... 返回std::make_pair(m_myptr,m_mystr); } 如何强制返回带有指向Class1的指针和std::字符串的std::pair?我不希望发生任何隐式转换。既然模板参数是在这里推导出来的,我该如何执行呢

如果我有此代码:

std::pair<Class1*,std::string> myFunc()
{
  ... 
  return std::make_pair(m_myptr, m_mystr);
}
std::pair myFunc()
{
... 
返回std::make_pair(m_myptr,m_mystr);
}
如何强制返回带有指向Class1的指针和std::字符串的std::pair?我不希望发生任何隐式转换。既然模板参数是在这里推导出来的,我该如何执行呢

简单地用

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

VS2012是否抛出错误

生成对的唯一目的是推断对的模板参数类型。如果您已经确切知道所需的
配对类型
,请直接初始化它,而不是调用
make\u pair

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

什么错误?
m_myptr
m_mystr
是如何声明的?是的,但由于某些原因这是错误:错误:“std::make_pair”:无法将参数1从“Class1*”转换为“Class1*”&&“uhm…”。。。刚找到。。像Class2*这样的指针可以转换为Class1*?这是允许的吗?@DavidKernin只有在Class2继承自Class1@DavidKernin您想禁止
m_myptr
m_mystr
的隐式转换吗?我理解这个问题的意思是,您希望禁止将返回值从其他
类型转换为
return {m_myptr, m_mystr};