Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: fortran1986 03. 04. 2020, 16:50:36
-
Mám takúto variadickú templatu (toto je len príklad v kóde použijem niečo trochu iné, ale v princípe ide o to isté).
template<typename ...Args>
void log(Args&&... args) {
(std::cout << ... << args) << endl;
}
no a keď túto funkciu pridám triede ako metódu tak nejde skompilovať. Prečo? Robím niečo zle? A ako donútiť compiler aby som tú variadickú funkciu vedel použiť aj ako metódu triedy? Alebo to vôbec nejde? Compiler používam C++ 17 ale podporuje to aj veci z C++ 20.
-
Kde překladač píše chybu? Jestli je problém s aplikací operátoru <<, zkusil bych něco takovéhoto:
template <typename T, typename ... Args>
class logger {
static void log (T & a1, Args & ... args)
{
cout << T;
log(args);
}
}
template <>
class logger {
static void log ()
{
cout << endl;
log(args);
}
}
Prostě takový trošku funkcionální přístup. Ale berte to jen přibližně, už je to pár let, co jsem si s tímhle hrál. Obvykle se v těchto případech spokojím s variadickým pojetím funkcí z C a formátovacími řetězci.
-
Iterovani pres parameter pack: https://stackoverflow.com/a/26550177/6950905
-
Problém zjevně není v té variadické šabloně (https://ideone.com/nmHPg9), ta je v pořádku. Problém bude v jejím použití, což ale v tom dotazu není vidět. Identifikátor log totiž není funkce, ale pouze šablona, podle níž se vyrobí funkce až v okamžiku, kdy se jí předají argumenty. Šablonu tedy nejde použít jako běžnou funkci, dokud nespecifikujeme šablonové parametry.
-
Takový parameter pack se řeší rekurzí, chce to tu funkci ve dvojím provedení.
-
Jako volná funkce i jako metoda třídy mi to funguje, viz tady (https://ideone.com/nmHPg9). Asi by bylo vhodné ukázat, co přesně nefunguje.
-
Ďakujem za odpovede a ospravedlňujem sa, problém bol asi v mojej nepozornosti, niečo som si asi nevšimol. Lebo teraz to funguje aj mne. A najhoršie je že ani netuším kde bola chyba, mal som sem skopírovať celý zdroják. Každopádne problém je vyriešený.