У меня есть код, который использует встроенную функцию поля в java, и я не смог найти способ заменить его в С ++, код показан ниже,
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#
Имхо, вам лучше описать, что вы хотите, чтобы код С ++ делал
Как я могу применить это подобным образом?
@ Jaa-c, не совсем так, там решения, только не из коробки.
Простая обертка вокруг союза?
Нет эквивалента, как и не может быть эквивалента. Это два совершенно разных языка программирования.
@ M.Prokhorov ваши связанные решения являются ли они классами, которые я могу использовать, чтобы получить тот же результат в поле?
@AMA, я не понимаю этого вопроса. Что значит «они сделали классы»? Вы читали какие-либо подробности о решениях, которые я связал?
@ М.Прохоров, насколько я понял, они пытаются реализовать свой собственный класс поля




Насколько мне известно, в C++ нет эквивалентного класса. Теперь для вашего требования сначала вы перечислите, что все классы java.lang.reflect.Field предоставляют в java. После того, как вы перечислили все служебные методы, просто отсортируйте список всех методов, которые вам действительно нужны в вашем приложении C++. После этого вы создаете класс C++ с тем же именем и типами методов и, если возможно, реализуете логику самостоятельно.
Вы не можете просто реализовать отражения самостоятельно. Это языковая функция, а не то, что вы реализуете. Для достижения аналогичной цели в C++ вам нужна совершенно другая логика.
Мне удалось создать класс Field, который обслуживает мой SDK, и он отлично работает. Спасибо за идею.
Нет эквивалента. В C++ нет отражений. Возможно, вы сможете сделать что-то подобное с каким-нибудь вариантом.