C++에서 템플릿 (형식) 인수로 열거 형을 사용하는 데 제한/문제가 있습니까?C++에서 템플릿 형식 인수로 enum을 사용
예 :
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
는 Win32에서 VS 2008 (SP1)을 통해 ++/86를 MSVC를 사용하여 내 실제 문제는 클래스로 열거를 사용와 관련하여 (컴파일러에 의해보고 된 = 오류) 여러 컴파일 오류가 템플릿 인수. 불행히도 내 프로젝트 불행히도 (당신은 디자인 오류로 간주 할 수 있습니다 : P), 이러한 오류를 제기 템플릿 클래스 파생, 중첩 및 열거 템플릿 매개 변수를 사용하여 클래스에 대한 전문도 복잡 해졌다.
빌드를 시도하면 컴파일러는 주석이있는 행에 "C2059 : syntax error : 'public'"과 같은 여러 가지 잘못된/쓸모없는 오류를보고합니다. 그 중 많은 것들은 예에서와 비슷한 방법으로 const _t & 매개 변수를 대체하여 해결할 수 있습니다 (매개 변수 복사). 그러나이 오류를 모두 해결할 수 없으며이 도움이되는 이유도 없습니다. ". ** 위의 간단한 예제는 w/o 오류를 컴파일합니다.
열거 형 대신 int를 사용하여 프로젝트에서 w/o 오류를 컴파일합니다.
미리 알려 주시면 감사하겠습니다.
편집 : 결국
, 나는 심각하게 컴파일러의 버그로 이것을 고려하십시오. 단순화 된 코드로 오류를 재현하려 할 때 매우 결정적이지 않은 모든 "빌드"의 50 % 만 가져 왔습니다.
예. 컴파일을 시도하고이 오류를보고했습니다. 다시 빌드 - 변경하지 마십시오. 주석을 삭제하고 빌드 - 변경하지 않았습니다. Rebuild - 그리고 나서 : no errors, 괜찮아요.
나는 이미 몇 가지 컴파일러 버그 (20k 줄의 코드 내에서 2 ~ 3 개)를 만났습니다. 그러나 이건 저에게 매우 이상하게 보입니다.
이 컴파일러 인 경우 인 경우 어떤 방법을 제안합니까?
"빌드를 시도하면 컴파일러에서 여러 가지 잘못된/쓸모없는 오류를보고합니다."이러한 "쓸모없는"오류는 종종 /와 어디서 잘못되었는지에 대한 매우 자세한 설명이 포함되어 있습니다. "오류 목록"대신 컴파일러 출력을 읽으십시오. – SigTerm
힌트를 보내 주셔서 감사합니다. 나는 항상 그렇게한다 ^^ 오류 : C2059 오류 : 구문 오류 : 'public'오류 C2143 : 구문 오류 : '>'before ';' 오류 C2143 : 구문 오류 : 누락 된 ';' '}'치명적인 오류 C1004 : 예기치 않은 파일 끝 (그리고이 질문과 관련없는 다른 오류가 있음)이 모두는 enum을 사용할 때만 나타나며 int를 사용할 때 사라진다. – dyp
이것은 나에게 완벽하게 들뜬다. . 이것은 컴파일러 오류 또는 오류 중 하나이며 추측 할 경우 99.9 %의 베팅은 사용자임을 나타냅니다. 하지만 게시 한 스 니펫에는 아무런 문제가 없습니다. 자체적으로 완료되는 작은 샘플과 작성한 정확한 컴파일러 오류를 게시하십시오. – Omnifarious