9

メモリ アラインメントの型定義を試みたところ、次の構成ができました (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  

そして、私はそれを次のように使用しようとします:

template<typename T>
class tsfo_vector {
private:
   sfo_type<T>::aptr32  m_data;
   int                  m_size;
...

しかし、次のエラーメッセージが表示されます。

/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;
 ^

ここで何が悪いのか誰にもアドバイスできますか?

4

1 に答える 1

12

aptr32に依存しTています:

template<typename T>
    class tsfo_vector {
    private:
        typename sfo_type<T>::aptr32 m_data;
      //^^^^^^^^

使用方法のtypename詳細については、「テンプレート」および「タイプ名」キーワードをどこに、なぜ配置する必要があるのですか?を参照してください。

于 2012-08-15T12:42:04.287 に答える