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)整个声明的东西,包括默认值。存在这样的东西吗?

4

1 回答 1

7

如果您的类型是默认可构造的,您可以编写自己的declvalue

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

将按如下方式使用:

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

现场演示

这种特殊情况似乎优化得很好,但我建议谨慎。

于 2016-10-27T16:53:38.607 回答