指向成员变量的指针 - C 中的自动类型
Pointer to member variable - auto type in C++
我想知道是否有一种方法可以将指针分配给成员变量的指针。我正在尝试:
struct DETECTOR
{
Long64_t time;
Double_t energy;
Int_t number;
};
void member(string member_string)
{
auto DETECTOR::*ptr;
if(member_string == "time") ptr = &DETECTOR::time;
if(member_string == "energy") ptr = &DETECTOR::energy;
if(member_string == "number") ptr = &DETECTOR::number;
//loop over a lot of DETECTOR objects and do some magic with them
}
,但由于明显的原因,这是不起作用的。我也不能在if语句中定义 ptr ,因为它会超出范围。
此代码的原因是我有很多检测对象必须在循环中处理,但仅基于用户选择的成员变量。如果我认为这会大大降低性能,我不想有不必要的话。
如果有另一种方法可以做到这一点,如果您能指出我,我将不胜感激。谢谢,我是编码的永恒初学者:)
编辑:抱歉,没有更清楚,我知道auto DETECTOR::*ptr;
为什么失败。我正在寻找一个解决方法,而没有这样的语句,同时循环所有DETECTOR
对象。
DETECTOR det;
if(member_string =="energy") do_magic(det.energy)
if(member_string =="time") do_magic(det.time)
auto
不是您要寻找的解决方案。C 的类型在运行时无法更改。auto
必须始终从其初始化器中推断出来。在您的情况下,没有初始化器,因此它不起作用。
我建议您将auto
移至lambda的参数:
void member(string member_string)
{
// Here, the type of `ptr` will be
// inferred when the lambda is called
// ~~~~v~~~~
auto do_magic = [](auto ptr) {
// loop over objects and do some magic with them
};
if(member_string == "time") do_magic(&DETECTOR::time);
if(member_string == "energy") do_magic(&DETECTOR::energy);
if(member_string == "number") do_magic(&DETECTOR::number);
}
lambda等同于函数模板:
template<typename T>
void do_magic(T ptr) {
// loop over objects and do some magic with them
}
您无法使用:
auto DETECTOR::*ptr;
由于没有初始化器,就无法推导auto
零件。例如
auto i = 10; // Type is deduced as int from 10.
auto j; // Type cannot be deduced without an initializer.
j = 10; // A subsequent assignment cannot be used to deduce type of j.
我无法提供更多有用的建议,而无需更多了解您的使用ptr
。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值