Есть ли способ прямого получения значения по умолчанию для члена, который был определен с помощью инициализации в классе? Например:
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) вся декларация, включая значение по умолчанию. Существует ли что-то подобное?
Если ваш тип является конструируемым по умолчанию, вы можете написать свой собственный declvalue
:
template<typename T, typename C>
constexpr T declvalue(T C::* ptr)
{
return C{}.*ptr;
}
который будет использоваться следующим образом:
int main() {
cout << declvalue(&Test::someValue) << endl;
}
Этот конкретный случай кажется хорошо оптимизировать, но я предлагаю осторожность
Других решений пока нет …