열거 형 길이를 계산하는 방법을 찾으려면 열거 형 끝에 "COUNT"요소를 추가하십시오. 다음과 같이 전처리기를 사용하는 방법을 찾았습니다.전 처리기를 사용하여 enum 크기 가져 오기
#include <iostream>
#include <boost/preprocessor/tuple/elem.hpp>
//simple declaration
template <class E>
struct enum_size;
//specialization is done in the macro for each enum created
#define MAKE_ENUM(name, ...) enum name {__VA_ARGS__}; \
template <> \
struct enum_size<name> { \
static const int value = BOOST_PP_VARIADIC_SIZE(__VA_ARGS__); \
};
MAKE_ENUM(my_enum1, a, b, c)
//MAKE_ENUM(my_enum2, a) //triggers compilation error
int main(int argc, char** argv) {
std::cout << enum_size<my_enum1>::value << std::endl;
}
그러나 나는 (Cygwin에서의 GCC 4.8.3) 컴파일러에서 재 선언 오류가 위와 같이
main.cpp:16:21: error: redeclaration of 'a'
MAKE_ENUM(my_enum2, a)
^
main.cpp:9:41: note: in definition of macro 'MAKE_ENUM'
#define MAKE_ENUM(name, ...) enum name {__VA_ARGS__}; \
^
main.cpp:15:21: note: previous declaration 'my_enum1 a'
MAKE_ENUM(my_enum1, a, b, c)
^
main.cpp:9:41: note: in definition of macro 'MAKE_ENUM'
#define MAKE_ENUM(name, ...) enum name {__VA_ARGS__}; \
을 다음과 같이 그때 MAKE_ENUM(my_enum2, e)
에 문제가있는 라인을 변경하는 경우 my_enum2
을 만들려고 할 때 그것은 깔끔하게 컴파일됩니다. 어떤 아이디어가 여기에 잘못되었으며 어떻게 해결할 수 있습니까? 미리 감사드립니다!
컴파일러가 아닌 GCC 명령 전 처리기 만 실행하고 매크로 확장 후에 생성 된 결과를 조사하여 문제점을 분명히해야합니다. https://gcc.gnu.org/onlinedocs/cpp/Invocation. html http://tigcc.ticalc.org/doc/comopts.html#SEC11 – Mawg