Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отдельные статические мемберы для каждого наследника / 9 сообщений из 9, страница 1 из 1
03.12.2020, 19:52
    #40024349
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Опять хочется странного: объявить статическую переменную, которая была бы глобальной не
для всех наследников разом, а для каждого в отдельности. Что-то типа такого:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
struct A
{
   static int i;
};

struct B: public A
{
   B() { i = 1; }
};

struct C: public A
{
   C() { i = 2; }
};

B b;
C c[2];

std::cout << b1.i << c[0].i << c[1].i;


И чтобы выводилось "1 2 2", а не "2 2 2".

PS: Да, можно было бы сделать А темплейтом и писать "struct B: public A<1>", "struct C : public A<2>", но надо как-то автоматизировать нумерацию.
...
Рейтинг: 0 / 0
03.12.2020, 20:00
    #40024352
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Dimitry Sibiryakov,

Странно даже то, что у вас конструкторы инициализируют статические переменные.

И это... Нужны отдельные статические переменные для наследников? Можно попробовать "странно рекурсивное наследование". Или вам нужна нумерация классов? Для чего если так?
...
Рейтинг: 0 / 0
03.12.2020, 20:07
    #40024355
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
petravНужны отдельные статические переменные для наследников? Можно попробовать "странно
рекурсивное наследование". Или вам нужна нумерация классов? Для чего если так?

Конкретно для второго примера. Чтобы массив наследников имел одну общую переменную, а не у
каждого свою.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.12.2020, 20:12
    #40024358
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Dimitry Sibiryakov,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
template <class Derived>
struct Base
{
    static int Value = 0;

    void doSomethingWithValue();
};

struct A: Base<A> {};

struct B: Base<B> {};



У всех наследников своя стат. переменная от предка. Я не знаю чем её инициализировать по сути задачи.
...
Рейтинг: 0 / 0
03.12.2020, 20:38
    #40024366
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
template <int Num>
struct A
{
   static constexpr int i = Num;
};

struct B: public A<1>
{
   
};

struct C: public A<2>
{
   
};



если нужно, чтобы предок был строго общий, то только через virtual/CRTP функционал
...
Рейтинг: 0 / 0
04.12.2020, 08:34
    #40024445
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Dimitry Sibiryakov, точно нужны именно отдельные переменные? Может подойдет например map по typeid?
...
Рейтинг: 0 / 0
04.12.2020, 14:09
    #40024607
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Barloneточно нужны именно отдельные переменные? Может подойдет например map по typeid?

Очень хочется чтобы синтаксис был именно b.i, а не i(b). И безымянные структуры.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.12.2020, 09:20
    #40025486
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Dimitry Sibiryakov,

Шаблонный предок + статический мембер этого шаблонного класса + CRTP = кажется решит твою проблему.
...
Рейтинг: 0 / 0
11.12.2020, 08:56
    #40026688
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отдельные статические мемберы для каждого наследника
Dimitry Sibiryakov


PS: Да, можно было бы сделать А темплейтом и писать "struct B: public A<1>", "struct C : public A<2>", но надо как-то автоматизировать нумерацию.
макросом, с использованием чего-то уникального по типу __LINE__, попробовать?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отдельные статические мемберы для каждого наследника / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]