2016-10-27 19 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に思えますしかし、私は誠実さを示唆しています。

関連する問題