모든 템플릿 클래스 멤버 함수의 인스턴스화 강제

제이슨 c

템플릿 클래스의 초기 개발 중에 전체 테스트 케이스를 작성하기 전에 컴파일러가 템플릿 클래스의 모든 멤버 (비 정적 멤버 포함)에 대한 코드를 생성하도록 강제 할 수있는 기능을 원합니다. 최소한 모든 코드가 컴파일되는지 확인하기위한 특정 템플릿 매개 변수 집합입니다.

특히, 저는 GCC 9를 사용하고 있습니다 (다른 컴파일러에서는이 기능이 실제로 필요하지 않습니다. 개발 중에 일시적으로 발생시키고 싶은 기능이기 때문입니다.) c++14, c++17, c++2ac++20표준.

예를 들어 다음 코드를 작성할 수 있습니다.

template <typename D> struct test_me {
  D value;
  void mistake1 () { value[0] = 0; }
  void mistake2 () { mistake1(value); }
  // and a bajillion other member functions...
};

그리고 가능한 템플릿 매개 변수의 유한 한 집합을 미리 알고 있다는 점을 감안할 때 ( 여기 intfloat여기에 있다고 가정 해 보겠습니다 ), 작업하는 동안 최소한 컴파일되었는지 확인하고 싶습니다.

이제 나는 이것을 할 수 있는데, 분명히 부족합니다.

int main () {
  test_me<int> i;
  test_me<float> f;
}

mistake1mistake2생성되지 않았기 때문에 비 배열 유형에 대한 인덱싱 된 액세스 시도와 잘못된 함수 호출에도 불구하고 코드가 제대로 컴파일됩니다.

그래서 제가 개발 중에했던 것은 모든 멤버 함수를 호출하는 코드를 작성하는 것입니다.

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 에서 컴파일러가 템플릿 매개 변수가 주어진 템플릿 클래스의 전체 구성원 집합에 대한 코드를 생성하도록 (잠재적으로 일시적으로) 강제하는 방법이 있습니까?

자로드 42

다만 명시 적으로 클래스의 인스턴스를 :

template struct test_me<int>;
template struct test_me<float>;

데모

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

템플릿 함수의 C ++ 템플릿 클래스 멤버

분류에서Dev

템플릿 : 클래스 유형의 멤버로 개체 인스턴스화

분류에서Dev

멤버 함수에 두 템플릿이 모두 사용되는 클래스 템플릿 내의 멤버 함수에 대한 단일 템플릿 정의

분류에서Dev

멤버 함수 템플릿의 인스턴스화를 삭제하는 방법은 무엇입니까?

분류에서Dev

클래스 멤버로서의 템플릿 인수 함수

분류에서Dev

템플릿 클래스의 멤버 함수 전문화

분류에서Dev

기본 템플릿 클래스 멤버의 모호성 해결

분류에서Dev

템플릿 정적 멤버 변수의 인스턴스화

분류에서Dev

멤버 변수로 멤버 클래스 템플릿을 인스턴스화 할 수 있습니까?

분류에서Dev

템플릿 클래스의 클래스 멤버 전문화

분류에서Dev

인스턴스화 오류 후 멤버 함수 템플릿의 전문화 및 멤버 함수 순서

분류에서Dev

템플릿 클래스의 멤버 함수

분류에서Dev

템플릿 클래스-멤버 함수 전문화

분류에서Dev

C ++ 템플릿 인스턴스화, 오류 : 비 클래스 유형 'int'의 멤버

분류에서Dev

C ++ 템플릿 인스턴스화, 오류 : 비 클래스 유형 'int'의 멤버

분류에서Dev

DLL에서 C ++ 멤버 함수 명시 적 템플릿 인스턴스화

분류에서Dev

C ++ 템플릿 : 기본 클래스에서 파생 된 템플릿 클래스의 멤버 함수 호출

분류에서Dev

C # 템플릿 클래스의 멤버 변수에 액세스

분류에서Dev

네임 스페이스에서 템플릿 클래스 멤버 함수 정의?

분류에서Dev

클래스 템플릿의 멤버 함수에 대한 명시 적 인스턴스화 선언이 클래스 템플릿의 인스턴스화를 유발합니까?

분류에서Dev

파생 클래스의 비 정적 템플릿 멤버 함수 바인딩

분류에서Dev

템플릿 클래스의 멤버 함수에 대한 C ++ 이름 확인

분류에서Dev

멤버 함수에서 템플릿 클래스 반환

분류에서Dev

Variadic 템플릿 클래스-Variadic 멤버 함수

분류에서Dev

중첩 클래스 템플릿의 정적 멤버 함수에 액세스

분류에서Dev

클래스 템플릿의 멤버 변수 순서

분류에서Dev

인스턴스에서 호출 될 때 템플릿 클래스의 템플릿 멤버 함수를 찾을 수 없음

분류에서Dev

C ++ : 비 템플릿 클래스의 멤버 인 일반 함수 래퍼 클래스

분류에서Dev

멤버 함수의 C ++ 조건부 템플릿 클래스 정의

Related 관련 기사

  1. 1

    템플릿 함수의 C ++ 템플릿 클래스 멤버

  2. 2

    템플릿 : 클래스 유형의 멤버로 개체 인스턴스화

  3. 3

    멤버 함수에 두 템플릿이 모두 사용되는 클래스 템플릿 내의 멤버 함수에 대한 단일 템플릿 정의

  4. 4

    멤버 함수 템플릿의 인스턴스화를 삭제하는 방법은 무엇입니까?

  5. 5

    클래스 멤버로서의 템플릿 인수 함수

  6. 6

    템플릿 클래스의 멤버 함수 전문화

  7. 7

    기본 템플릿 클래스 멤버의 모호성 해결

  8. 8

    템플릿 정적 멤버 변수의 인스턴스화

  9. 9

    멤버 변수로 멤버 클래스 템플릿을 인스턴스화 할 수 있습니까?

  10. 10

    템플릿 클래스의 클래스 멤버 전문화

  11. 11

    인스턴스화 오류 후 멤버 함수 템플릿의 전문화 및 멤버 함수 순서

  12. 12

    템플릿 클래스의 멤버 함수

  13. 13

    템플릿 클래스-멤버 함수 전문화

  14. 14

    C ++ 템플릿 인스턴스화, 오류 : 비 클래스 유형 'int'의 멤버

  15. 15

    C ++ 템플릿 인스턴스화, 오류 : 비 클래스 유형 'int'의 멤버

  16. 16

    DLL에서 C ++ 멤버 함수 명시 적 템플릿 인스턴스화

  17. 17

    C ++ 템플릿 : 기본 클래스에서 파생 된 템플릿 클래스의 멤버 함수 호출

  18. 18

    C # 템플릿 클래스의 멤버 변수에 액세스

  19. 19

    네임 스페이스에서 템플릿 클래스 멤버 함수 정의?

  20. 20

    클래스 템플릿의 멤버 함수에 대한 명시 적 인스턴스화 선언이 클래스 템플릿의 인스턴스화를 유발합니까?

  21. 21

    파생 클래스의 비 정적 템플릿 멤버 함수 바인딩

  22. 22

    템플릿 클래스의 멤버 함수에 대한 C ++ 이름 확인

  23. 23

    멤버 함수에서 템플릿 클래스 반환

  24. 24

    Variadic 템플릿 클래스-Variadic 멤버 함수

  25. 25

    중첩 클래스 템플릿의 정적 멤버 함수에 액세스

  26. 26

    클래스 템플릿의 멤버 변수 순서

  27. 27

    인스턴스에서 호출 될 때 템플릿 클래스의 템플릿 멤버 함수를 찾을 수 없음

  28. 28

    C ++ : 비 템플릿 클래스의 멤버 인 일반 함수 래퍼 클래스

  29. 29

    멤버 함수의 C ++ 조건부 템플릿 클래스 정의

뜨겁다태그

보관