java.lang.Field 等效于 c++ 中

java.lang.Field equivalent in c++

本文关键字:c++ lang Field java      更新时间:2023-10-16

我有一个使用 Java 中 Field 内置函数的代码,我找不到在 C++ 中替换它的方法,代码如下所示,

import java.lang.reflect.Field; 
 
public class ParameterValue { 
    public String objectPath; 
    public Object objectReference; 
    public String fieldPath; 
    public String fieldPathNoCase; 
    public Field field; 
 public double value; 
  
 public ParameterValue(String path, ObjectTree tree, Field fieldInfo) { 
  objectPath = path; 
  objectReference = tree.getObject(path); 
  field = fieldInfo; 
  fieldPath = objectPath + "." + field.getName(); 
  fieldPathNoCase = fieldPath.toLowerCase();  
  read(); 
 } 
 
 public int getPrecision() { 
if (field.getType().getName() == "float" || field.getType().getName() == "double") 
   return 2; 
  else 
   return 0; 
 } 
  
 public double getPrecisionMultiplier() { 
  return Math.pow(10, getPrecision()); 
 } 
  
 public void read() { 
  String type = field.getType().getName(); 
  try { 
   if (type.equals("double")) 
    value = field.getDouble(objectReference); 
   else if (type.equals("float")) 
    value = field.getFloat(objectReference); 
   else if (type.equals("int")) 
    value = field.getInt(objectReference); 
   else if (type.equals("byte")) 
    value = field.getByte(objectReference); 
   else 
    throw new RuntimeException(); 
  } catch (IllegalAccessException e) { 
   throw new RuntimeException(e); 
  } 
  value = Math.round(value * getPrecisionMultiplier()) / getPrecisionMultiplier(); 
 } 
  
 public void write() { 
  String type = field.getType().getName(); 
  try { 
   if (type.equals("double")) 
    field.setDouble(objectReference, value); 
   else if (type.equals("float")) 
    field.setFloat(objectReference, (float)value); 
   else if (type.equals("int")) 
    field.setInt(objectReference, (int)Math.round(value)); 
   else if (type.equals("byte")) 
    field.setByte(objectReference, (byte)Math.round(value)); 
   else 
	   throw new RuntimeException(); 
  } catch (IllegalAccessException e) { 
   throw new RuntimeException(e); 
  } 
 } 
  
 public void rebind(ObjectTree tree) { 
  objectReference = tree.getObject(objectPath); 
 } 
}

我从代码中了解到的是,我需要找到一个可以将其中的值转换为 Double、Float 等的类。我一直在寻找可以做到这一点的东西,但我无法做到这一点。代码参考:https://www.programcreek.com/java-api-examples/index.php?source_dir=SecugenPlugin-master/src/sourceafis/simple/Fingerprint.java#

我所知,C++没有等效的类。现在,对于您的需求,首先列出java.lang.reflect.Field类在java中提供的所有内容。列出所有实用程序方法后,只需排序列出C++应用程序中真正需要的所有方法即可。完成后,您将创建一个具有相同名称和方法类型的C++类,并在可能的情况下自行实现逻辑。