模板错误:非类型".. [与T = T]不是类型名称"

Sky*_*ker 8 c++ templates compiler-errors cross-compiling

尝试键入我的内存对齐方式我提出了以下构造(由于我需要更正GNU版本,因此仍然需要进行一些工作):

#if defined(__GNUG__)
template <typename T>
struct sfo_type {
    typedef T* restrict __attribute__((aligned(32))) aptr32;
};

#elif defined(__INTEL_COMPILER)
template <typename T>
struct sfo_type {
    typedef T* restrict __attribute__((aligned(32))) aptr32;
};
#endif  
Run Code Online (Sandbox Code Playgroud)

然后我尝试像这样使用它:

template<typename T>
class tsfo_vector {
private:
   sfo_type<T>::aptr32  m_data;
   int                  m_size;
...
Run Code Online (Sandbox Code Playgroud)

但后来我收到以下错误信息:

/Users/bravegag/code/fastcode_project/code/src/sfo_vector.h(43): error: nontype "sfo_type<T>::aptr32 [with T=T]" is not a type name
 sfo_type<T>::aptr32 m_data;
 ^
Run Code Online (Sandbox Code Playgroud)

任何人都可以在这里建议什么是错的吗?

hmj*_*mjd 10

aptr32取决于T:

template<typename T>
    class tsfo_vector {
    private:
        typename sfo_type<T>::aptr32 m_data;
      //^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

有关使用的进一步说明,typename请参阅"模板"和"typename"关键字的位置和原因?