development

클래스 템플릿에서 정적 멤버 초기화

big-blog 2020. 6. 27. 10:10
반응형

클래스 템플릿에서 정적 멤버 초기화


나는 이것을하고 싶다 :

template <typename T>
struct S
{
    ...
    static double something_relevant = 1.5;
};

그러나 나는 그 이후 something_relevant로 완전한 유형이 아닙니다. 에 의존하지 T않지만 기존 코드는의 정적 멤버에 의존합니다 S.

S는 템플릿이므로 컴파일 된 파일에 정의를 넣을 수 없습니다. 이 문제를 어떻게 해결합니까?


헤더에 정의하십시오.

template <typename T>
struct S
{
    static double something_relevant;
};

template <typename T>
double S<T>::something_relevant = 1.5;

모든 템플릿과 마찬가지로 템플릿의 일부이므로 컴파일러는 한 번만 정의되도록합니다.


이 작동합니다

template <typename T>
 struct S
 {

     static double something_relevant;
 };

 template<typename T>
 double S<T>::something_relevant=1.5;

C ++ 17부터 정적 멤버를로 선언 inline하면 클래스 정의에 변수가 정의됩니다.

template <typename T>
struct S
{
    ...
    static inline double something_relevant = 1.5;
};

라이브 : https://godbolt.org/g/bgSw1u

참고 URL : https://stackoverflow.com/questions/3229883/static-member-initialization-in-a-class-template

반응형