Provare a digitare l'allineamento della memoria Sono uscito con il seguente costrutto (che è ancora un po 'di lavoro in corso perché ho bisogno di correggere la versione GNU):errore di modello: nontype ".. [con T = T] non è un nome di tipo"
#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
e poi cerco di usare in questo modo:
template<typename T>
class tsfo_vector {
private:
sfo_type<T>::aptr32 m_data;
int m_size;
...
ma poi ricevo il seguente messaggio di errore:
/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;
^
Qualcuno può consigliare cosa c'è che non va qui?
Nizza, grazie! In realtà sono perplesso da questo ... come mai un membro dei dati deve avere un contrassegno typedef in primo piano per compilare? è un po 'strana. –
@GiovanniAzua, la risposta collegata spiega l'uso di 'typename' molto meglio di quanto avrei potuto. – hmjd
@GiovanniAzua: non è il membro dati, ma il suo tipo è preceduto da 'typedef'. – celtschk