реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Closed TopicStart new topic
> const staic простыня из констант - boilerplate
С дуба рухнул
сообщение Aug 6 2018, 11:08
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Код
// h file
class CViewXXX
{
....
struct frame_cntrl_pairT
  {
      int idOnline; //
      int idSetup; //
  };

static const frame_cntrl_pairT m_onlineData[];
};
//cpp file
const CViewXXX::frame_cntrl_pairT CViewXXX::m_onlineData[] = {
{1,2},
{3,4},
{5,6},
};

Многовато для такой мелочи. Если же типы в frame_cntrl_pairT не int, а , например, шаблонные типы, то все становится просто безумно малочитаемым. Как делаете? define не вариант

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 11:09
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 14:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 14:08) *
Как делаете?
С дуба рухнул, поясните, что именно "делаем"?

Цитата
то все становится просто безумно малочитаемым
Нет причин беспокоится: в данном случае вы уже достигли "дна" biggrin.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 14:25
Сообщение #3





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



У меня в классе есть несколько windows control. У них у всех есть свой ID. Контролы попарно связаны, их кол-во тоже хардкодить не очень хочется. Вот совсем если просто в Си
Код
    typedef struct  
    {
        int a;
        int b;
    } pair_t;
    pair_t pairs[] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    for (int i = 0; i < sizeof(pairs) / sizeof(pairs[0]); i++)
       // some stuff

Так делают многие, это нормально читается. В плюсах хочу иметь тоже самое. Как не "хуже уже точно" сделать?
Мне нужны константные пары, общие для всего класса, то бишь статики. Ничего в конструкторы пихать не надо, все считается при компиляции. Если Вы "не дно" то предложите как надо. Пары должны быть в пространстве имен класса, define в садик.

Вот такие вот ошибки https://docs.microsoft.com/en-us/previous-v...kb76w(v=vs.120)

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 14:19
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 14:27
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата
Мне нужны константные пары, общие для всего класса, то бишь статики.

Первое, что нужно сделать под плюсами, убрать нафик статики.

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

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

Цитата
Пары должны быть в пространстве имен класса.

Еще раз - удалить static, тут он костыль, который попьет еще немало крови.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 14:40
Сообщение #5





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Я не спрашивал "зачем", я просил "как". MSDN говорит, что правильно все, нельзя not an integral type, use a member-definition statement.

Цитата(Forger @ Aug 6 2018, 15:27) *
Первое, что нужно сделать под плюсами, убрать нафик статики.


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


Еще раз - удалить static, тут он костыль, который попьет еще немало крови.

Мне нужен static const. Да и даже начихав на расход памяти для дублежа на каждый экземпляр такого класса с не static членами - ничего не выйдет, структура это non integral тип, и так инициализировать ее нельзя. Будет уже https://docs.microsoft.com/en-us/previous-v...3ks1w(v=vs.120) cannot specify explicit initializer for arrays
Причем тут шаблонные классы вообще? Вопрос был как проиниициализровать статическую константную структуру всего лишь

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 14:41
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 14:48
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 17:40) *
Я не спрашивал "зачем", я просил "как".

В таком случае ответ будет только один: остаться на голом С, забыть про плюсы, и слушаться MSDN, ведь "MSDN говорит, что правильно все". biggrin.gif

Цитата
Да и даже начихав на расход памяти для дублежа на каждый экземпляр такого класса с не static членами - ничего не выйдет,

Странно, а у меня это прекрасно получается ...
Но раз, Вы так говорите что "ничего не выйдет", то действительно - у Вас ничего и не выйдет

Цитата
Вопрос был как проиниициализровать статическую константную структуру всего лишь

А я вот только сейчас увидел этот первый прямой вопрос. Ну, наверно, плохо читал ((
Ответ: посмотрите в сторону "constexpr"


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 14:52
Сообщение #7





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Можно пример того, что требуется привести?
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 14:56
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 17:52) *
Можно пример того, что требуется привести?

???




--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 14:59
Сообщение #9





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Как использовать constexpr для таких целей
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 15:04
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 17:59) *
Как использовать constexpr для таких целей


Для начала почитать, что это вообще такое. Гугль в помощь.

Или вот так:
Код
static const pair_t pairs[] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };

Прямо внутри файла cpp делайте это.

А внутри объявления класса это, разумеется, делать нельзя: static переменные (поля) внутри объявления класса - это лютая дичь, за которую нужно бить по рукам еще в детстве krapula.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 15:09
Сообщение #11





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Цитата(Forger @ Aug 6 2018, 16:04) *
Для начала почитать, что это вообще такое. Гугль в помощь.

Или вот так:
Код
static const pair_t pairs[] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };

Прямо внутри файла cpp делайте это.

А внутри объявления класса это, разумеется, делать нельзя: static переменные (поля) внутри объявления класса - это лютая дичь, за которую нужно бить по рукам еще в детстве krapula.gif

Вот пожалуйста https://msdn.microsoft.com/ru-ru/library/cz0a83sb.aspx
именованные режимы открытия файлов - статически константы класса, и если Вы считаете, что Майкрософту до Вас как до Луны - могу дать других примеров подобного рода, даже не посылая в гугл
И да, я погуглил, увы. Может натолкнете , как constexpr позволит создать статические инициализированные константные по-сути своей таблицы?
Update - не, наврал, они enum нарисовали и ручками значения забили. ОК, поищу более похожее позднее
И да, Мейерса тоже не били? https://habr.com/post/147373/

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 15:22
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 15:39
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 18:09) *
Майкрософту до Вас как до Луны

Где вы там увидели статические поля (члены данных)?
https://msdn.microsoft.com/ru-ru/library/60fh2b6f.aspx

Цитата
Может натолкнете , как constexpr позволит создать статические инициализированные константные по-сути своей таблицы?

Еще раз для тех, кто "в танке":
Прямо внутри файла cpp делайте это: static const pair_t pairs[] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
И забудьте уже наконец про объявление статических полей внутри класса!
Максимум - статический метод, и то в самом крайнем случае!
И не забывайте про enum, который как раз и объявляется внутри класса, чтобы снаружи был виден владельцам этого класса.

Цитата
И да, Мейерса тоже не били? https://habr.com/post/147373/

Вы хоть читайте ссылки, которые сами же и даете biggrin.gif
Синглтон - это один из самых спорных паттернов. По сути, это некий костыль, и все из-за все того же static.
Его применение требует четкого понимания, как он работает.
Я давно от него отказался, хотя, признаюсь, раньше частенько им "грешил" wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 16:00
Сообщение #13





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Чем тут помогло и где оно constexpr? Вы нарисовали Сишный вариант, что я уже рисовал выше. Так и до define дойдем. В cpp файле совершенно необязательно реализация одного класса, и код такой засоряет. В Дельфи есть with http://www.delphisources.ru/pages/faq/faq_...s/With.php.html , в срр такого, как я понял нет. Правда неуверен, что в Дельфи он сможет сделать абсолютно то, что хотел, но направление именно такое хотел. И пожалуйста, не надо выкладывать тут весь свой огромный багаж знаний, сторожить некому. Достаточно написать было "код в начале топике упростить нельзя.

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 16:02
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 16:11
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831




Цитата(С дуба рухнул)
Достаточно написать было "код в начале топике упростить нельзя.

Достаточно было в самом начале написать, что ИМЕННО вам нужно. Телепатов не существует - это миф.
Код в начале топика можно упростить, только полностью переписав. Ибо то, что вы привели, может понять только один лишь его автор.

Короче, если вам не нравится constexpr, то используйте enum. Он есть даже в голом си.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 17:39
Сообщение #15





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Код
class baseCalendar
{
    protected:
    enum class monthT {jan, feb, march, april};
    
    struct monthInfo {
        monthT month;
        int daysCnt;  
    };
    static const monthInfo m_monthInfo[];
};
const baseCalendar::monthInfo baseCalendar::m_monthInfo[] = {
    {baseCalendar::monthT::jan, 31},
    {baseCalendar::monthT::feb, 28},
    {baseCalendar::monthT::jan, 31},
        {baseCalendar::monthT::april, 30},
};

class CRussianCalendar : public baseCalendar
{
    // а тут мне нужны константы, данные в базовом классе, а точнее m_monthInfo, так вот мне интересно, что предлагают гуру под словами "переписать все. ты дно. юзай constexpr. ". Они ж в другом файле по советам советчиков, а путин сказал, что мало работаем, в феврале 35 дней будет. Мне теперь всех наследников переписывать?  Или заниматься субклассированием сущностей с одной идиотской целью поменять константы?
    
};

Подскажите, что и как переписать, я начинающий, вчера книгу купил с++ за 21 день, но непонятно.

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 17:41
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 10:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01551 секунд с 7
ELECTRONIX ©2004-2016