2013-07-19 103 views
1

如果我有這樣的代碼:防止模板參數的隱式轉換

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

我怎麼執行返回一個std ::對用指針到Class 1和的std :: string?我不希望發生任何隱式轉換。由於模板參數是在這裏推導出來的,我該如何執行?

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

只需expliciting參數與VS2012

+1

什麼錯誤?如何聲明'm_myptr'和'm_mystr'? –

+0

是的,但由於某種原因,這是錯誤: 錯誤:'std :: make_pair':無法將參數1從'Class1 *'轉換爲'Class1 * &&' –

+1

uhm ...剛發現.. http ://connect.microsoft.com/VisualStudio/feedback/details/691756/std –

回答

3

唯一目的拋出一個錯誤make_pair是推斷類型模板參數爲pair。如果你已經知道你想要pair完全型,直接對其進行初始化,而不是調用make_pair

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

或(C++ 11):

return {m_myptr, m_mystr}; 
+0

像Class2 *的指針可以轉換爲Class1 *嗎?這是允許的嗎? –

+0

@DavidKernin只有當Class2繼承自Class1 – IdeaHat

+0

@DavidKernin你想禁止'm_myptr'和'm_mystr'的​​隱式轉換?我理解這個問題意味着你想禁止將其他'pair'類型的返回值轉換爲'pair '。 – Casey