检索类内初始化成员的默认值

时间:2016-10-27 16:46:51

标签: c++ c++11 in-class-initialization

有没有办法直接检索使用类内初始化定义的成员的默认值?例如:

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;
}

基本上可以复制&#39; (类似于 decltype )整个声明,包括默认值。这样的事情存在吗?

1 个答案:

答案 0 :(得分: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,但我建议谨慎。