java中的java.lang.Field等价物

时间:2018-04-17 11:51:59

标签: java c++

我有一个在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#

1 个答案:

答案 0 :(得分:1)

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