Frage

Ich habe ein sehr seltsames Problem mit Vorlagen. Einen Fehler erhalten error: ‘traits’ is not a template. Ich konnte das Problem bei einem Beispiel -Testprojekt nicht reproduzieren. Aber es passiert in meinem Projekt (was größer ist, als ich hier posten kann).

Wie auch immer, folgen die Dateien und Verwendungen, die ich habe. Hat jemand eine Vorstellung davon, wann dieser Fehler auftritt?

Ich habe Folgendes in 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;
    };
}

Dies wird in einer anderen Header -Datei verwendet.

namespace silc {

    template<typename T>
    class node {                
    public:

        typedef typename traits<T>::const_reference const_reference;

        const_reference value() const {
            /* ... */
        }
    }
}
War es hilfreich?

Lösung

Syntax für die Vorlagenspezialisierung ist ... nicht angenehm.

Ich glaube, Ihr Fehler kann durch Ersetzen behoben werden struct traits<U> durch struct traits (aber gehen struct traits<U*> wie es ist!).

Aber schau auf die helle Seite! Zumindest führen Sie keine teilweise Spezialisierung über Funktionstypen aus:

// 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*)> { ... };
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top