Есть енам, содержимое которого генерится через Х макрос. В какой то момент может появиться итем в енаме с конкретным именем, нужно отловить этот момент. Есть ли какая-нибудь возможность это сделать? Буст не предлагать.
К примеру, если бы итем был макросом, а не енамом можно было бы сделать так:
Здравствуйте, koenjihyakkei, Вы писали:
K>Есть енам, содержимое которого генерится через Х макрос. В какой то момент может появиться итем в енаме с конкретным именем, нужно отловить этот момент. Есть ли какая-нибудь возможность это сделать? Буст не предлагать.
Здравствуйте, koenjihyakkei, Вы писали:
K>Есть енам, содержимое которого генерится через Х макрос. В какой то момент может появиться итем в енаме с конкретным именем, нужно отловить этот момент. Есть ли какая-нибудь возможность это сделать? Буст не предлагать.
К>Проверяет, есть ли вообще имя REQUIRED_VALUE, является ли оно значением, и совпадает ли его тип с THE_ENUM_TYPE.
насколько я понял ТС, нужна ошибка, если REQUIRED_VALUE появится. А твой код будет давать ошибку, если его нет. Если нужно именно так, то можно сильно проще
#include <iostream>
#include <type_traits>
using namespace std;
// должно было быть enum E { A, Q, R };
// не должно быть enum E { X, Y, Z };enum E { A, B, C, Z };
int R; // случайно определили вне энумаint Y;
// для тех имён, которые нигде не определены "по-настоящему", сделаем затычкуnamespace last_chance { enum EE { X, Z }; }
void checker() {
using namespace last_chance; // задействуем затычку
// white list
static_assert( std::is_same<::E, decltype(A)>::value, "A is not defined" );
static_assert( std::is_same<::E, decltype(Q)>::value, "A is not defined" ); // ERROR
static_assert( std::is_same<::E, decltype(R)>::value, "A is not defined" ); // ERROR
// black list
static_assert( !std::is_same<::E, decltype(X)>::value, "X is defined!" );
static_assert( !std::is_same<::E, decltype(Y)>::value, "Y is defined!" );
static_assert( !std::is_same<::E, decltype(Z)>::value, "Z is defined!" ); // ERROR
}
int main() {
// your code goes herereturn 0;
}
Ого, круто! Я честно говоря, и не думал, что возможно такое будет сделать) Ну ладно, теперь еще один пунктик, с которым, я думаю, точно будет невозможно — енам безымянный.
Здравствуйте, koenjihyakkei, Вы писали:
K>Ого, круто! Я честно говоря, и не думал, что возможно такое будет сделать) Ну ладно, теперь еще один пунктик, с которым, я думаю, точно будет невозможно — енам безымянный.