powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отдельные статические мемберы для каждого наследника
9 сообщений из 9, страница 1 из 1
Отдельные статические мемберы для каждого наследника
    #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
Отдельные статические мемберы для каждого наследника
    #40024352
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

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

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

Конкретно для второго примера. Чтобы массив наследников имел одну общую переменную, а не у
каждого свою.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Отдельные статические мемберы для каждого наследника
    #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
Отдельные статические мемберы для каждого наследника
    #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
Отдельные статические мемберы для каждого наследника
    #40024445
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, точно нужны именно отдельные переменные? Может подойдет например map по typeid?
...
Рейтинг: 0 / 0
Отдельные статические мемберы для каждого наследника
    #40024607
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barloneточно нужны именно отдельные переменные? Может подойдет например map по typeid?

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

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


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


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