2016-10-27 2 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 , но я предлагаю осторожность.

Смежные вопросы