检索类内初始化成员的默认值
Retrieve default value of in-class initialized member
是否有任何方法可以直接检索使用类内初始化定义的成员的默认值?例如:
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;
}
现场演示
这个特殊的情况似乎优化得很好,但我建议谨慎。
相关文章:
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- C++中未初始化成员布尔变量的默认值是多少?
- C++11 默认类成员初始化与初始值设定项列表同时
- 为什么不能使用"( )"为类的非静态数据成员提供默认值?
- 使用默认值初始化成员引用
- 模板类专业化具有成员变量和方法的默认值
- 初始化类成员 - 默认值还是成员初始化列表?
- 具有类成员默认值的 C++11 默认构造函数行为
- 受保护成员 c++ 的默认值
- 成员属性作为方法的默认值
- Corba IDL:结构成员的默认值
- 结构成员的默认值
- 为向量成员和更新元素指定默认值
- 基本成员初始化与在类声明中指定默认值
- 类内定义的静态结构的静态成员的编译时默认值
- 使用类函数中的类数据成员作为默认值 c++
- boost::绑定具有默认值的成员函数
- 如何将未知类型的数据成员初始化为默认值
- 为引用成员变量提供默认值
- 我可以为模板成员函数提供几个默认值吗