шаблон разыменования массива рекурсивного c-типа - PullRequest
0 голосов
/ 16 декабря 2018

Пытаюсь создать шаблонные функции, которые рекурсивно разыменовывают массив, если это возможно, но разыменовывают его еще до тестирования.Как я могу пойти по этому поводу?

template <typename T>
int countLayer(T &a){
    if (sizeof(a)/sizeof(int)) return countLayer(*a)+1;
return 1;}

, даже если это одно ложное уже

template <typename T>
int countLayer(T &a){
    if (false) return countLayer(*a)+1;
return 1;}

только что осмотрелся и нашел type_traits, но вместо этого не использовать дополнительные библиотеки для функции какнеобходимо.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

.. просто пример: this:

void printArray(const int (&a)[2][2][4]){
    cout<<'{'; bool aAf=true;
    for (const int (&aA)[2][4]: a){         if (aAf) aAf=false; else cout<<", "; cout<<'{'; bool aBf=true;
        for (const int (&aB)[4]: aA){       if (aBf) aBf=false; else cout<<", "; cout<<'{'; bool aCf=true;
            for (const int (&aC): aB){      if (aCf) aCf=false; else cout<<", ";
                cout<<aC;}
            cout<<'}'; }
        cout<<'}'; }
    cout<<"}\n";    
}

.. уменьшается до:

void printA(int &a) { cout<< a; };

template <typename T>
void printA(T &a) {
    cout << '{';
    bool first=true;
    for (auto &aS: a){  if (first) first=false; else cout<<", ";
                        printA(aS); }
    cout << '}';                    
}

.. и прекрасно обрабатывает любой тип массива до тех пор, пока унарный типсуществует

.. просто приятно и очень удобно знать; P

0 голосов
/ 17 декабря 2018

... okok нашел его:

int countLayer(int &a){ return 0; }
int countLayer(double &a){ return 0; }
int countLayer(char &a){ return 0; }

template <typename T>
int countLayer(T &a){
    return 1+countLayer ( *a);
return 1;}

.. таким образом, нормальные унарные типы countLayers-Funktion уже определены, и нужно генерировать только массивы, поэтому я не могуразыменовать унарный, и это круто; P .. Очевидно, это довольно опасно, потому что я мог бы пропустить любой тип, не объявленный заранее, но все же.... идеал все вместе - не для подсчета слоев, а для общего вывода или около того ... своего рода обработка каждого элемента в массиве.

спасибо "nm", но нет смысла там - но я получаюэто .. это должно быть своего рода constexpr для работы с шаблонами, но докажите, что я не прав ... пожалуйста; P в любом случае ура "nm"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...