Я экспериментировал с использованием библиотеки бустеров в качестве части системы, которую я разрабатываю. Я получил работающую систему единиц и могу заставить ее конвертировать и вычислять нужные мне значения. Проблема, с которой я сталкиваюсь, заключается в том, что при просмотре источника в Visual Studio я не нашел способа определить, какую именно единицу измерения представляет переменная, не переходя к определению или при использовании отладчика.
Например, если у меня есть какое-то значение:
int someInteger = 10;
double someDouble = 10;
затем позже:
auto result = someInteger * someDouble;
Я могу навести курсор на result, someInteger и someDouble и увидеть их типы в intellisense. Я знаю, что someInteger - это int, а someDouble - это double, и если я использую отладчик, я также могу видеть текущее значение на шаге счетчика программы.
Однако, с типами единиц усиления, такими как:
quantity<si::electric_potential> someVoltage = 1 * si::volts;
auto someCurrent = 1 * si::amperes;
auto calculated = someVoltage / someCurrent;
Когда я нахожу над некоторым напряжением или некоторым током в intelisense, я вижу только:
"boost::units::quantity<...>"
для типа.
При использовании отладчика я вижу его текущее значение в том, что у него есть какой-то тип, и в нем перечислено много типов буста, но нет способа увидеть устройство. Однако, когда переменная печатается, например, так:
std::cout << calculated << std::endl;
печатает:
1 (ohm)
, так что буст-модули знают модуль, поэтому компилятор должен сказать мне, что это за тип. Я просто не могу понять, как заставить это работать. Я использую VS2010 и, к сожалению, не имею других вариантов для этого проекта.
EDIT:
Я только что заметил очень странное поведение. Если я включаю функцию в программу:
void checkVoltage(boost::units::quantity<electric_potential> someVoltage);
void checkVoltage(boost::units::quantity<electric_potential> someVoltage){
//do something:
}
Затем типы отображаются для всех напряжений в intellisense.
Любая помощь будет принята с благодарностью.