Информация об изменениях

Сообщение Re: Простецкий вопрос от 26.10.2020 10:57

Изменено 26.10.2020 11:08 vopl

Re: Простецкий вопрос
Здравствуйте, TailWind, Вы писали:

TW>Вот есть константы

TW>Каждая на 1 больше другой

TW>Как это автоматизировать?

TW>Не хочется ошибиться вбивая номера
TW>Хочется написать что-то типа = N++;

TW>
TW>static const ULONG Cmd_aaa = 1;
TW>static const ULONG Cmd_bbb = 2;
TW>static const ULONG Cmd_ccc = 3;
TW>static const ULONG Cmd_ddd = 4;
TW>


#include <iostream>

template <int I> struct Cnt {static constexpr int v = Cnt<I-1>::v;};
template <> struct Cnt<0> {static constexpr int v = 0;};

#define NEXT(name) template <> struct Cnt<__LINE__> {static constexpr int v = Cnt<__LINE__-1>::v+1;}; static const int name = Cnt<__LINE__>::v;

NEXT(Cmd_aaa);
NEXT(Cmd_bbb);

NEXT(Cmd_ccc);
NEXT(Cmd_ddd);

int main()
{
    std::cout << Cmd_aaa << ", " << Cmd_bbb << ", " << Cmd_ccc << ", " << Cmd_ddd << std::endl;
    return 0;
}
Re: Простецкий вопрос
Здравствуйте, TailWind, Вы писали:

TW>Вот есть константы

TW>Каждая на 1 больше другой

TW>Как это автоматизировать?

TW>Не хочется ошибиться вбивая номера
TW>Хочется написать что-то типа = N++;

TW>
TW>static const ULONG Cmd_aaa = 1;
TW>static const ULONG Cmd_bbb = 2;
TW>static const ULONG Cmd_ccc = 3;
TW>static const ULONG Cmd_ddd = 4;
TW>


#include <iostream>

template <int I> struct Cnt {static constexpr int v = Cnt<I-1>::v;};
template <> struct Cnt<0> {static constexpr int v = 0;};

#define NEXT(name) template <> struct Cnt<__LINE__> {static constexpr int v = Cnt<__LINE__-1>::v+1;}; static const int name = Cnt<__LINE__>::v;

NEXT(Cmd_aaa);
NEXT(Cmd_bbb);

NEXT(Cmd_ccc);
NEXT(Cmd_ddd);

int main()
{
    std::cout << Cmd_aaa << ", " << Cmd_bbb << ", " << Cmd_ccc << ", " << Cmd_ddd << std::endl;
    return 0;
}


добавка: со структурой переборщил, можно сразу значениями оперировать
template <int I> constexpr int Cnt = Cnt<I-1>;
template <> constexpr int Cnt<0> = 0;

#define NEXT(name) template <> constexpr int Cnt<__LINE__> = Cnt<__LINE__-1>+1; static const int name = Cnt<__LINE__>;