반응형
클래스 템플릿에서 정적 멤버 초기화
나는 이것을하고 싶다 :
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
반응형
'development' 카테고리의 다른 글
버튼 클릭으로 PHP 함수를 호출하는 방법 (0) | 2020.06.27 |
---|---|
CTE와 SubQuery의 차이점은 무엇입니까? (0) | 2020.06.27 |
Object.is vs === (0) | 2020.06.27 |
Java API가 short 또는 byte 대신 int를 사용하는 이유는 무엇입니까? (0) | 2020.06.27 |
Android 앱에서 비디오를 녹화하려면 어떻게해야합니까? (0) | 2020.06.27 |