2010-02-21 5 views
2

У меня очень странная проблема с шаблонами. Получение ошибки error: ‘traits’ is not a template. Я не мог воспроизвести проблему в тестовом проекте. Но это происходит в моем проекте (который больше, чем я могу разместить здесь).error: 'traits' не является шаблоном - C++

В любом случае, следующие файлы и обычаи, которые у меня есть. Кто-нибудь имеет представление о том, когда возникает эта ошибка?

У меня есть следующее в traits.hpp.

namespace silc 
{ 
    template<class U> 
    struct traits<U> 
    { 
     typedef const U& const_reference; 
    }; 

    template<class U> 
    struct traits<U*> 
    { 
     typedef const U* const_reference; 
    }; 
} 

Это используется в другом файле заголовка.

namespace silc { 

    template<typename T> 
    class node {     
    public: 

     typedef typename traits<T>::const_reference const_reference; 

     const_reference value() const { 
      /* ... */ 
     } 
    } 
} 

ответ

3

Синтаксис для специализации по шаблону ... не нравится.

Я считаю, что ваша ошибка может быть устранена путем замены struct traits<U> на struct traits (но оставьте struct traits<U*> как есть!).

Но посмотрите на яркую сторону! По крайней мере, вы не выполняете частичную специализацию по типам функций:

// Partial class specialization for 
// function pointers of one parameter and any return type 
template <typename T, typename RetVal> 
class del_ptr<T, RetVal (*)(T*)> { ... }; 

// Partial class specialization for 
// functions of one parameter and any return type 
template <typename T, typename RetVal> 
class del_ptr<T, RetVal(T*)> { ... }; 

// Partial class specialization for 
// references to functions of one parameter and any return type 
template <typename T, typename RetVal> 
class del_ptr<T, RetVal(&)(T*)> { ... }; 
+1

Спасибо. Это была глупая ошибка, которую я когда-либо делал. Еще раз спасибо за указание на это. –

Смежные вопросы