Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: fortran1986 17. 08. 2021, 16:35:42

Název: C++ using v hlavičke šablóny
Přispěvatel: fortran1986 17. 08. 2021, 16:35:42
Ahojte, občas by som si chcel sprehladniť kód a zabrániť zbytočnému prepisovaniu rovnakého kódu a tak v C++ pomerne veľa používam typové aliasy. Problém je, že v hlavičke šablóny typový alias definovať nemôžem, alebo hej? Uvediem príklad kedy by sa mi hodil typový alias:

Kód: [Vybrat]
template <
typename BeginRecordType,
typename RecordType = BeginRecordType,
typename ...Args
>
using _Table = Table<BeginRecordType, RecordType, Args...>; // už tu by sa mi hodilo definovať typový alias
class Table : public ranges::view_facade<_Table>
{
public:
using QueryList = std::tuple<Args...>;
        // kod triedy...
}

To isté platí aj pre hlavičku template funkcie (alebo metódy), kde by sa mi zase hodil alias na skrátenie názvov typov v pri argumentoch funkcie. Ako tento problém riešiť? Existuje nejaké čisté riešenie (na úrovni jazyka?) alebo to mám nejako ohackovať preprocessorom?
Název: Re:C++ using v hlavičke šablóny
Přispěvatel: Jiří Havel 18. 08. 2021, 07:39:01
Ahojte, občas by som si chcel sprehladniť kód a zabrániť zbytočnému prepisovaniu rovnakého kódu a tak v C++ pomerne veľa používam typové aliasy. Problém je, že v hlavičke šablóny typový alias definovať nemôžem, alebo hej? Uvediem príklad kedy by sa mi hodil typový alias:

Kód: [Vybrat]
template <
typename BeginRecordType,
typename RecordType = BeginRecordType,
typename ...Args
>
using _Table = Table<BeginRecordType, RecordType, Args...>; // už tu by sa mi hodilo definovať typový alias
class Table : public ranges::view_facade<_Table>
{
public:
using QueryList = std::tuple<Args...>;
        // kod triedy...
}

To isté platí aj pre hlavičku template funkcie (alebo metódy), kde by sa mi zase hodil alias na skrátenie názvov typov v pri argumentoch funkcie. Ako tento problém riešiť? Existuje nejaké čisté riešenie (na úrovni jazyka?) alebo to mám nejako ohackovať preprocessorom?
V tomhle případě se opakování asi nevyhneš. Já osobně pro něco takového lepší řešení nevymyslel. Hákování preprocesorem je IMO horší, než to v tomhle případě prostě zopakovat. Stačí 2x - jednou do báze a podruhé jako using v těle třídy.
Název: Re:C++ using v hlavičke šablóny
Přispěvatel: fortran1986 31. 08. 2021, 21:15:48
Ahojte, občas by som si chcel sprehladniť kód a zabrániť zbytočnému prepisovaniu rovnakého kódu a tak v C++ pomerne veľa používam typové aliasy. Problém je, že v hlavičke šablóny typový alias definovať nemôžem, alebo hej? Uvediem príklad kedy by sa mi hodil typový alias:

Kód: [Vybrat]
template <
typename BeginRecordType,
typename RecordType = BeginRecordType,
typename ...Args
>
using _Table = Table<BeginRecordType, RecordType, Args...>; // už tu by sa mi hodilo definovať typový alias
class Table : public ranges::view_facade<_Table>
{
public:
using QueryList = std::tuple<Args...>;
        // kod triedy...
}

To isté platí aj pre hlavičku template funkcie (alebo metódy), kde by sa mi zase hodil alias na skrátenie názvov typov v pri argumentoch funkcie. Ako tento problém riešiť? Existuje nejaké čisté riešenie (na úrovni jazyka?) alebo to mám nejako ohackovať preprocessorom?
V tomhle případě se opakování asi nevyhneš. Já osobně pro něco takového lepší řešení nevymyslel. Hákování preprocesorem je IMO horší, než to v tomhle případě prostě zopakovat. Stačí 2x - jednou do báze a podruhé jako using v těle třídy.

Ďakujem Vám za odpoveď. Zatiaľ to aj kopírujem.