C++ using v hlavičke šablóny

C++ using v hlavičke šablóny
« kdy: 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?
« Poslední změna: 17. 08. 2021, 17:47:17 od Petr Krčmář »


Re:C++ using v hlavičke šablóny
« Odpověď #1 kdy: 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.

Re:C++ using v hlavičke šablóny
« Odpověď #2 kdy: 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.