2017-05-04 54 views
0

我目前有一些奇怪的東西正在進行。我正在嘗試使用VC++編譯器編寫一個模板類。VC++類模板使用typedef類型實現函數

在我的課程中,爲了清晰起見,我找到了幾個typedef。實際執行我有我的headerfile之外

template<typename T, 
    typename = typename std::enable_if<std::is_arithmetic<T>::value,T>::type> 
class Integer 
{ 
public: 
    typedef T      value_type; 
    typedef Integer <value_type> Self; 
    typedef Self&     SelfReference; 
    typedef Self*     SelfRawPointer; 
    ... 
public: 
    SelfReference operator =(const SelfReference); 

* .tcc - 文件:

... 
template<typename T> Integer<T>::SelfReference Integer<T>::operator =(const 
Integer<T>::SelfReference rhs) 
{ 
    return this->assign(rhs); 
}; 
... 

與過去在gcc我有沒有做這種方式,但現在在Windows上的任何問題編譯器抱怨'SelfReference':C2061:語法錯誤:標識符'SelfReference'

我不知道什麼是錯的,因爲它使用gcc它在過去工作過...我錯過了什麼嗎?這個問題不會出現,如果我寫函數內聯。我現在只是好奇,爲什麼在窗戶上我有這種問題!

回答

5

SelfReference是一個依賴型,所以你需要使用typename

template <typename T> 
typename Integer<T>::SelfReference Integer<T>::operator=(const typename Integer<T>::SelfReference rhs) { blah; } 

Integer<T>::的,你也可以只使用SelfReference,即正確的。

template <typename T> 
typename Integer<T>::SelfReference Integer<T>::operator=(const SelfReference rhs) { blah; } 

這是對在C++ 11的auto返回值的原因之一,你現在可以寫

template <typename T> 
auto Integer<T>::operator=(const SelfReference rhs) -> SelfReference 
{ 
    blah; 
}