Istnieją trzy różne rodzaje argumentów szablonu: wartości, typy i szablony:
template <int value_argument> class C { };
template <class type_argument> class D { };
template <template<classT> class template_argument> class E { };
Podczas korzystania z tych szablonów musisz Podaj argument prawidłowego rodzaju:
C<3> c;
D<int> d;
E<C> e;
Podczas korzystania z trzeciego formularza, szablon szablonu argument, szablon przekazany jako argument musi mat ch deklaracja argumentu szablonu szablonu. W moich prostych przykładach szablon oczekuje od szablonu szablonu argumentu, który przyjmuje jeden typ argumentu.
W kodzie w pytaniu, pierwszym argumentem w deklaracji Foobar
jest template <class> class TContainer
. W miejscu, gdzie jest on używany, szablon, który jest przekazywane jest std::vector
:
Foobar<std::vector, IUnknown*> bla(v);
Problem polega na tym, że argument szablonu szablon mówi, że powinien on mieć jeden argument, ale szablon, który jest przekazywany jako rzeczywistą argumentu ma dwa lub więcej . Formalnie std::vector
jest
template <class T, class Allocator = std::allocator<T>> class vector { ... };
Aby korzystać std::vector> as the first argument to
Foobar , the definition of
Foobar` musi zostać zmieniony tak, że pierwszy argument przyjmuje dwa argumenty typu:
template <template<class, class> TContainer, class TObject> class Foobar { ... };
@itwasntpete, bardzo pomocne, dziękuję. – moose
mój pierwszy komentarz był żartem ... ale w twoim kodzie jest sporo problemów. również przekazanie typu (int) i określonej klasy szablonów (wektor) jest również kwestią projektowania. możesz zacząć jak [tutaj] (http://ideone.com/i00l0t). –
user1810087
zarzutów wyjaśnić, dlaczego nie jest funkcjonalny i czego się spodziewać? –