С++Advanced, Task 05_03 - Parser - работа с темплейти
Здравейте,
не мога да разбера защо в main() и на трите места в Parser<int> p(std::cin, stopLine); на std::cin ми дава следната грешка (с описание на съответния тип, че го няма): " no instance of constructor "Parser<T>::Parser[with T=std::string (съответно int, и Song)]" matches the argument list argument types are: (std::istream, std::string) ?
в Parser.h работя с темплейти: (Също и класа Song не го разпознава в този хедър, защо?) Явно нещо много съм "разкрасила" с новите знания... опитвам се и за Song да направя специализация, но само се опитвам ...
Може би подходът за решаване на задачата ми е погрешен? Моля за хелп...
Parser.h
template <typename T>
class Parser {
private:
static getLine(istream & in, std::string s) {
T variableUnknownType;
while (in && s != this->limiter) {
in >> variableUnknownType;
this->dataLi.push_back(variableUnknownType);
ostringstream oss;
oss << variableUnknownType;
s = oss.str();
}
}
std::string limiter;
std::list<T> dataLi;
public:
Parser(std::cin, std::string limiter) :
dataLi(Parser::getLine(std::cin, limiter),
limiter(limiter)) {}
template <typename T1>
bool readNext(T1& o) {
if (!this->dataLi.empty()) {
o = *(dataLi.begin());
this->dataLi.erase(dataLi.begin());
return true;
}
return false;
}
bool readNext<Song> (Song & o) {
if (!this->dataLi.empty()) {
o = *(dataLi.begin());
this->dataLi.erase(dataLi.begin());
return true;
}
return false;
}