检索 in-class 初始化成员的默认值
Retrieve default value of in-class initialized member
是否有任何方法可以直接检索使用 in-class 初始化定义的成员的默认值?例如:
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;
}
基本上是'copies'(类似于decltype)整个声明,包括默认值。有这样的东西吗?
如果您的类型是默认可构造的,您可以编写自己的 declvalue
:
template<typename T, typename C>
constexpr T declvalue(T C::* ptr)
{
return C{}.*ptr;
}
将按如下方式使用:
int main() {
cout << declvalue(&Test::someValue) << endl;
}
这个特殊情况似乎optimize well,但我建议保持警惕。
是否有任何方法可以直接检索使用 in-class 初始化定义的成员的默认值?例如:
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;
}
基本上是'copies'(类似于decltype)整个声明,包括默认值。有这样的东西吗?
如果您的类型是默认可构造的,您可以编写自己的 declvalue
:
template<typename T, typename C>
constexpr T declvalue(T C::* ptr)
{
return C{}.*ptr;
}
将按如下方式使用:
int main() {
cout << declvalue(&Test::someValue) << endl;
}
这个特殊情况似乎optimize well,但我建议保持警惕。