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

Retrieve default value of in-class initialized member

本文关键字:默认值 成员 初始化 检索      更新时间:2023-10-16

是否有任何方法可以直接检索使用类内初始化定义的成员的默认值?例如:

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

现场演示

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