2014-11-06 2 views
2

내 유형에 현재 인스턴스 데이터 멤버가 없습니다. 앞으로 실수로 아무 것도 추가되지 않도록하고 싶습니다.유형에 데이터 멤버가없는 정적 단언

어떻게 든 static_asserttype_traits으로이 작업을 수행 할 수 있습니까? 필자가 생각해 낸 가장 좋은 점은 유형의 크기를 주장하는 것이었지만 추상 형식이기 때문에 적어도 won't work이거나 최소한 휴대용 형식이 아니어야합니다.

정적 데이터 멤버가되어 드리겠습니다.

+0

아니, 나는 그렇게 생각하지 않는다. 왜 이걸 원하니? 냄새 같아. –

+0

@LightnessRacesinOrbit, 문제를 벗어날 위험이 있습니다. 유스 케이스는 템플릿 클래스 계층 구조에서 유형 삭제를위한 순수 가상 기본 클래스를 작성합니다. 본질적으로 C# 또는 Java 인터페이스의 경우와 같이 형식이 보조 기본 클래스로 '안전'하도록하고 싶습니다. –

+0

Shame C++에는 "인터페이스"가 없습니다. –

답변

1

유형의 크기를 확인하는 것이 좋습니다.

입니다
static_assert(sizeof(T) == sizeof(Dummy), "oops"); 

는 대상 클래스의 크기가 데이터 멤버가없는 것으로 알려져 클래스의 크기와 동일한 지 확인하십시오 당신은 단순히 다음 더미 추상적 인 클래스 등을 만들 수 있습니다.

+0

멋진 트릭. 감사. –

+3

'virtual' 함수 및/또는 소멸자의 경우 크기가 다를 수 있습니다. 이 기능이 전혀 작동하지 않는다면 구현이 정의 된 것은 아닙니다. – rubenvb

+1

@rubenvb : 나는 특별히 더미 클래스가 추상적이라고 (즉, 가상 함수를 가짐) 말했고, OP는 대상 클래스에 대해서도 마찬가지라고 말했다. 나는 그것이 작동하지 않는 곳에서 구현을 찾는다. :) –

관련 문제