尝试输入我的内存对齐方式我提出了以下构造(这仍然是一些工作正在进行中,因为我需要更正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;
^
有人可以在这里建议什么是错的吗?
答案 0 :(得分:10)
aptr32
依赖于T
所以:
template<typename T>
class tsfo_vector {
private:
typename sfo_type<T>::aptr32 m_data;
//^^^^^^^^
有关使用typename
的进一步说明,请参阅Where and why do I have to put the "template" and "typename" keywords?