템플릿 클래스의 초기 개발 중에 전체 테스트 케이스를 작성하기 전에 컴파일러가 템플릿 클래스의 모든 멤버 (비 정적 멤버 포함)에 대한 코드를 생성하도록 강제 할 수있는 기능을 원합니다. 최소한 모든 코드가 컴파일되는지 확인하기위한 특정 템플릿 매개 변수 집합입니다.
특히, 저는 GCC 9를 사용하고 있습니다 (다른 컴파일러에서는이 기능이 실제로 필요하지 않습니다. 개발 중에 일시적으로 발생시키고 싶은 기능이기 때문입니다.) 와 c++14
, c++17
, c++2a
및 c++20
표준.
예를 들어 다음 코드를 작성할 수 있습니다.
template <typename D> struct test_me {
D value;
void mistake1 () { value[0] = 0; }
void mistake2 () { mistake1(value); }
// and a bajillion other member functions...
};
그리고 가능한 템플릿 매개 변수의 유한 한 집합을 미리 알고 있다는 점을 감안할 때 ( 여기 int
와 float
여기에 있다고 가정 해 보겠습니다 ), 작업하는 동안 최소한 컴파일되었는지 확인하고 싶습니다.
이제 나는 이것을 할 수 있는데, 분명히 부족합니다.
int main () {
test_me<int> i;
test_me<float> f;
}
mistake1
및 mistake2
생성되지 않았기 때문에 비 배열 유형에 대한 인덱싱 된 액세스 시도와 잘못된 함수 호출에도 불구하고 코드가 제대로 컴파일됩니다.
그래서 제가 개발 중에했던 것은 모든 멤버 함수를 호출하는 코드를 작성하는 것입니다.
template <typename D> static void testCalls () {
test_me<D> t;
t.mistake1();
t.mistake2();
// and so on... so many mistakes...
}
int main () {
testCalls<int>();
testCalls<float>();
}
그러나 이것은 특히 회원 함수가 복잡한 부작용이나 전제 조건을 갖기 시작하거나 사소하지 않은 매개 변수를 필요로하거나 비공개 회원과 아직 개발되지 않은 친구가있을 때 고통이됩니다. 따라서 모든 것을 명시 적으로 호출하지 않고 컴파일을 테스트하는 방법을 원합니다 (이상적으로는 새 멤버를 추가 할 때 "테스트"코드 를 전혀 수정하지 않고 컴파일을 테스트 할 수 있기를 바랍니다 ).
그래서 내 질문은 : 적어도 GCC 9 에서 컴파일러가 템플릿 매개 변수가 주어진 템플릿 클래스의 전체 구성원 집합에 대한 코드를 생성하도록 (잠재적으로 일시적으로) 강제하는 방법이 있습니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다