2016-10-27 6 views
4

클래스의 초기화를 사용하여 정의 된 멤버의 기본값을 직접 검색하는 방법이 있습니까? 예를 들면 :클래스의 초기화 된 멤버의 기본값 검색

기본적으로
struct Test 
{ 
    int someValue = 5; 
}; 

int main(int argc,char *argv[]) 
{ 
    auto val = declvalue(Test::someValue); // Something like this; Should return 5 
    std::cout<<val<<std::endl; 
    for(;;); 
    return 0; 
} 

뭔가 그 기본값을 포함하여 전체 선언 (decltype 유사) '사본'. 그와 같은 것이 존재합니까? 당신의 유형은 기본 작도 인 경우

+10

'auto val = Test {}. someValue;' –

답변

7

, 당신은 쓸 수 있습니다 자신의 declvalue :로 사용되는

template<typename T, typename C> 
constexpr T declvalue(T C::* ptr) 
{ 
    return C{}.*ptr; 
} 

은 다음과 같습니다

int main() { 
    cout << declvalue(&Test::someValue) << endl; 
} 

live demo

이 특별한 경우가 optimize well 보인다 그러나 나는 경건을 제안합니다.