просто возвращает не тип параметра - PullRequest
0 голосов
/ 20 декабря 2018

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

#include<iostream>
using namespace std;

template<int size_of_array>
class arr 
{
public:
    int  arr[size_of_array];

    int size_of() { return size_of_array;   }
};

int main() 
{
    arr<4> arr1;
    cout << arr1.size_of();

    return 0;
}

Можем ли мы сделать что-то вроде присваивания значения переменной во время выполнения, например, если мы удалим arr[] оттуда.как

#include<iostream>
using namespace std;

template<int size_of_array>
class arr 
{
public:
    int  size_of_array;
    int size_of() { return size_of_array;   }
};

int main() 
{
    arr<4> arr1;
    cout << arr1.size_of();

    return 0;
}

Можем ли мы сделать это?или почему нет?Тогда, может быть, в массиве и объявлении переменной есть кое-что, чего я не знаю.Заранее спасибо.

1 Ответ

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

Абсолютно!Вы можете открыть параметры шаблона, написав функцию для их передачи.

Ваша попытка не удалась только потому, что:

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

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

Итак, для такого типа шаблона, как ваш, просто:

template <int size_of_array>
class arr 
{
public:
    static int size_of() { return size_of_array; }
};

Теперь arr<42>::size_of() равно 42!

(I 'мы сделали это static, не потому, что вам нужно, а потому, что в этом примере это имеет смысл; вы могли бы сделать его не-static, но const функцией-членом.)

И для типа:

template <typename T>
class arr 
{
public:
    using array_size_t = T;
};

Теперь arr<T>::array_size_t это тип T!

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