2012-09-07 65 views
0

所以,我有這個模板類,我正在嘗試編寫一個通用轉換運算符。 我想出是這樣(不工作:「錯誤 - 預期‘類型名稱’後合格的名稱」):模板顯式轉換運算符

template <typename T> 
class object{ 
... 
T internal; 
... 
template <typename U> 
explicit operator typename decltype(
std::conditional< 
    std::is_convertible<T, U>::type , U, T>::type)() 
{ 
return static_cast<std::conditional<std::is_convertible<T, U>::type ,U, T>::type>(internal); 
} 

難道我做錯了什麼或只是不可能?

+0

請注意,'的std :: is_convertible '在很多情況成立。 –

+2

實際上你想要做什麼? –

回答

1

設法找到了我自己的解決方案:

template <typename U> 
    explicit operator typename decltype(std::conditional< 
             std::is_convertible<T, U>::type , 
             U, 
             T>::type)::value_type() 

    { 
     return static_cast<typename decltype(std::conditional< 
         std::is_convertible<T, U>::type , 
         U, 
         T>::type)::value_type>(internal); 
    } 
+0

你使用什麼編譯器? 'decltype'不應該在那裏工作。 –

+3

我相信它在'std :: conditional <> :: type'之前確實需要一個typename,因爲它是相關的,而不一定是一個類型。此外,只有少數類型具有嵌套的'value_type'類型,這似乎表明您的真實問題與您所問的不同。在將來考慮問**你真正想要解決的**問題。這不能回答你所提出的問題。 –

+0

@ R.MartinhoFernandes gcc 4.7.0 – user1233963