Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
1

Как инициализировать статический константный массив в классе?

21.12.2021, 01:44. Показов 2052. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
template<typename T>class Logik{public:
static bool mr_(T q,T w){...}static bool br_(T q,T w){...}//как прописать их константыми без понятия
static bool(*mbrn[2])(T,T)/*={mr_,br_}*/;//массив будет постоянным, также мне нужна 1на переменная на все экземпляры поэтому static 
};
В моём случае все данные известны на старте, не нужно крутить никаких рекурсий и получать константные значения.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2021, 01:44
Ответы с готовыми решениями:

Как инициализировать статический константный массив в классе?
Например, есть класс, которой статически хранит виды себя. Не могу понять как его инициализировать...

Как инициализировать массив в классе
private: static char const figury_={0,4,0,0, 0,1,0,3, 2,1,0,3, ...

Как создать статический массив компонентов и инициализировать его?
Создать наверное можно так: lbl: array of TLabel; А вот как грамотно инициализировать его уже...

В классе инициализировать массив, в классе создать функцию вывода массива на экран
Прошу помоши с выводом данных, которые содержаться в массиве, на экраy: Задача: В классе...

23
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
19.02.2022, 02:31 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Nexi99 Посмотреть сообщение
А это определение возможно только в фигурных скобочках и через рекурсию нельзя разве?
Дело же не в скобках.
У статического члена класса, такого, как ваш массив указателей на функции, должно быть определение. Вы можете совместить его с инициализацией, а можете не совмещать, и сделать потом присваивание через рекурсию, или через цикл, или через что вообще хотите. Но определение должно быть.

Смотрите.
Простой пример:
C++
1
2
3
4
class A {
public:
    static int a[2]; 
};
К нему необходимо определение. Вы можете его сделать так:
C++
1
2
3
4
// есть тут фигурные скобки и вообще инициализация в явном виде или нет - не важно
int A::a[2] = {}; 
// int A::a[2];
// int A::a[2] = {1, 2};
Или так:
C++
1
2
3
4
5
6
7
class A {
public:
    // есть тут фигурные скобки и вообще инициализация в явном виде или нет - не важно
    static inline int a[2] = {};  
    // static inline int a[2];  
    // static inline int a[2] = {1, 2};  
};
Если мы уберем inline или уберем отдельно вынесенное определение, то просто получим ошибку линковки в той единице трансляции, где будет обращение к этому массиву.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
19.02.2022, 20:32  [ТС] 22
123456
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
24.01.2023, 04:31  [ТС] 23
Цитата Сообщение от DrOffset Посмотреть сообщение
Еще раз: статический член класса с отличным от целочисленного типом нуждается в определении. Инициализация тут не при чем. Вы можете какие угодно делать рекурсии, но определение обязаны предоставить.
А с помощью рекурсий как это сделать? Можете показать пример где объявлен константый массив в классе и проиницилизирован с помощью рекурсий например с помощью таких технологий Получить значение константы инстанции, ну тут пример будет посложнее конечно.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,790
Записей в блоге: 4
29.01.2023, 16:29  [ТС] 24
Как это работает?
C++
1
2
3
4
5
6
7
К>template<class T, size_t N> class X
{
T data_[N];
public:
X(T const (&src)[N]) { std::copy(src,src+N,data_); }
};
template<class T, size_t N> X<T,N> make_X(T const (&src)[N]) { return X<T,N>(src); }
Похоже на рекурсии. Мне в принципе не приципиально какой массив в классе или обычный константный возникает вопрос а как прописать значение именно в каждую ячеку? В данном примере видимо вычисляется размер на каждой инстанции что и позволяет его инициализировать.
Вот ещё какой-то пример. Но мне он не подходит мне нужно что-то ближе к циклам и инстанциям.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
template<typename T, int N>
struct array
{
    enum {size = N};
    T body[N];
    operator T*() {return body;}
    operator T const*() const {return body;}
    ... /* можно сделать STL like container по желанию */
};
 
template<typename T> 
array<T, 1> create_array(T a)
{
    array<T, 1> tmp = {{a}};
    return tmp;
}
template<typename T> 
array<T, 2> create_array(T a, T b)
{
    array<T, 2> tmp = {{a, b}};
    return tmp;
}
 
template<typename T> 
array<T, 3> create_array(T a, T b, T c)
{
    array<T, 3> tmp = {{a, b, c}};
    return tmp;
}
 
template<typename T> 
array<T, 4> create_array(T a, T b, T c, T d)
{
    array<T, 4> tmp = {{a, b, c, d}};
    return tmp;
}
...
 
class foo 
{
public:
    foo() : doubles(create_array(10.0, 20.0, 30.0))
    {
    }
    
private:
    array<double, 3> const doubles;
};
 
int main()
{
    foo f;
    return 0;
}
0
29.01.2023, 16:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2023, 16:29
Помогаю со студенческими работами здесь

Как создать в классе статический массив типа string?
Всего есть два класса. Класс Monster имеет поля: enum раса, string имя и int HP. Второй класс...

Статический массив в классе
Необходимо чтобы в классе №1 был динамический массив другого класса №2 типа static чтобы любой...

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с...

Статический константный объект класса
Извиняюсь за создание второй темы, но ...typedef std::vector&lt;int&gt; VI; class matrix { ...

Статический константный член-класса
Добрый день, что компилятору не нравится? VS 2013 // рекурсивное шаблоное метапрограммирование ...

создать статический массив строк как статический массив указателей на строки, задание ниже -->
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru