Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szablon jako parametr szablonu

Ostatnio zmodyfikowano 2017-05-01 20:11
Autor Wiadomość
croppp
Temat założony przez niniejszego użytkownika
Szablon jako parametr szablonu
» 2017-05-01 18:44:29
Mam problem z kompilacją poniższego kodu:

C/C++
#include<iostream>
#include<vector>
#include<deque>
#include<list>
using namespace std;

template < typename T,
template < typename X > class Sequence = std::deque >
class Stack {
    Sequence < T > _rep;
public:
    void push( T e ) { _rep.push_back( e ); };
    T pop() { T top = _rep.top(); _rep.pop_back(); return top; }
    bool is_empty() const { return _rep.empty(); }
};


main() {
    Stack < double, std::vector > sv;
   
}

Błąd jaki dostaje:
"error: type/value mismatch at argument 2 in template parameter list for 'template<class T, template<class X> class Sequence> class Stack'|"

Gdzie dokładnie tkwi błąd?
P-160643
Monika90
» 2017-05-01 19:08:19
vector i deque przyjmują dwa parametry, ten drugi parametr to alokator.

A jak się deklaruje funkcję to należy podać typ zwracany, w przypadki main jest to int.
P-160644
croppp
Temat założony przez niniejszego użytkownika
» 2017-05-01 19:13:05
Ale czy rzeczywiście podawanie alokatora jest tutaj potrzebne? Normanie przyjmuje chyba wartość domyślną?

Program znalazłem tutaj:
http://wazniak.mimuw.edu.pl/index.php?title=Zaawansowane_CPP/Wyk%C5%82ad_1:_Szablony_I

w rozdziale "Szablony parametrów szablonu"

Oryginalny kod:

http://wazniak.mimuw.edu.pl/images/3/31/Stack_adapter.cpp
P-160645
Monika90
» 2017-05-01 19:52:33
Musisz poczekać na nowszy kompilator, bo twój kod jest legalny wg standardu C++ dopiero od listopada 2016.
http://open-std.org/JTC1/SC22​/WG21/docs/cwg_defects.html#150

Więc na razie pozostaje Ci dopisać tam std::allocator<T> ręcznie.
P-160647
croppp
Temat założony przez niniejszego użytkownika
» 2017-05-01 20:11:56
Ok, dzięki za pomoc <3
P-160648
« 1 »
  Strona 1 z 1