2 votes

Comment déclarer la classe modèle suivante

J'essaie de déclarer en avant concurrent_bounded_queue ;

class MyClass {
    namespace tbb {
        template<typename T> class cache_aligned_allocator;
        template<class T, class A = cache_aligned_allocator> class concurrent_bounded_queue;
    };

    // I wish to maintain this syntax.
    tbb::concurrent_bounded_queue<std::string>& concurrentBoundedQueue;
}

J'obtiens l'erreur suivante :

error C3203: 'cache_aligned_allocator' : unspecialized class template can't be used as a template argument for template parameter 'A', expected a real type
error C2955: 'tbb::cache_aligned_allocator' : use of class template requires template argument list c:\projects\vitroxreport\src\Executor.h(21) : see declaration of 'tbb::cache_aligned_allocator'

Puis-je savoir comment je peux l'éviter ?

Merci.

5voto

Nikolai N Fetissov Points 52093

L'allocateur est un modèle, mais le second argument de la file d'attente est une classe concrète. Essayez ceci :

class MyClass {
    namespace tbb {
        template<typename T> class cache_aligned_allocator;
        template<class T, class A = cache_aligned_allocator<T> > 
            class concurrent_bounded_queue;
    };

    tbb::concurrent_bounded_queue<std::string>& concurrentBoundedQueue;
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X