#include <iostream>
#include <functional>
#include <map>
#include <tuple>
using namespace std;
using tCommandKey=unsigned int;
using tCommandDescription=string;
using tCommandUnit=string;
using tCommandValueConvertor=function<float(int)>;
using tCommandData=tuple<tCommandDescription, tCommandUnit, tCommandValueConvertor>;
static const map<tCommandKey, tCommandData> commands = {
{ 0x41, make_tuple("weight","g", nullptr) },
{ 0x42, make_tuple("voltage", "V", [](int in) { return (float)in / 10; }), }
};
int main() {
// your code goes here
auto it = commands.find(0x42);
if (it != commands.end())
{
int in = 255;
auto [desc, unit, convertor] = it->second;
float result = convertor ? convertor(in) : in;
cout << "command addr " << it->first;
cout << " reading " << desc;
cout << " in [" << unit << "]";
cout << ((convertor) ? "with" : "without") << " conversion";
cout << ", result = " << result;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHR1cGxlPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIHRDb21tYW5kS2V5PXVuc2lnbmVkIGludDsKdXNpbmcgdENvbW1hbmREZXNjcmlwdGlvbj1zdHJpbmc7CnVzaW5nIHRDb21tYW5kVW5pdD1zdHJpbmc7CnVzaW5nIHRDb21tYW5kVmFsdWVDb252ZXJ0b3I9ZnVuY3Rpb248ZmxvYXQoaW50KT47CnVzaW5nIHRDb21tYW5kRGF0YT10dXBsZTx0Q29tbWFuZERlc2NyaXB0aW9uLCB0Q29tbWFuZFVuaXQsIHRDb21tYW5kVmFsdWVDb252ZXJ0b3I+OwoKc3RhdGljIGNvbnN0IG1hcDx0Q29tbWFuZEtleSwgdENvbW1hbmREYXRhPiBjb21tYW5kcyA9IHsKCXsgMHg0MSwgbWFrZV90dXBsZSgid2VpZ2h0IiwiZyIsIG51bGxwdHIpIH0sCgl7IDB4NDIsIG1ha2VfdHVwbGUoInZvbHRhZ2UiLCAiViIsIFtdKGludCBpbikgeyByZXR1cm4gKGZsb2F0KWluIC8gMTA7IH0pLCB9Cn07CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQoJYXV0byBpdCA9IGNvbW1hbmRzLmZpbmQoMHg0Mik7CglpZiAoaXQgIT0gY29tbWFuZHMuZW5kKCkpCgl7CgkJaW50IGluID0gMjU1OwoJCQoJCWF1dG8gW2Rlc2MsIHVuaXQsIGNvbnZlcnRvcl0gPSBpdC0+c2Vjb25kOwoJCQoJCWZsb2F0IHJlc3VsdCA9IGNvbnZlcnRvciA/IGNvbnZlcnRvcihpbikgOiBpbjsKCQljb3V0IDw8ICJjb21tYW5kIGFkZHIgIiA8PCBpdC0+Zmlyc3Q7CgkJY291dCA8PCAiIHJlYWRpbmcgIiA8PCBkZXNjOwoJCWNvdXQgPDwgIiBpbiBbIiA8PCB1bml0IDw8ICJdIjsKCQljb3V0IDw8ICgoY29udmVydG9yKSA/ICJ3aXRoIiA6ICJ3aXRob3V0IikgPDwgIiBjb252ZXJzaW9uIjsKCQljb3V0IDw8ICIsIHJlc3VsdCA9ICIgPDwgcmVzdWx0OwoJfQoJCglyZXR1cm4gMDsKfQ==