string amnt = "100000000";
string json = @"
{
'method': 'submit',
'params': [{
'secret': 'snL7AcZbKsHm1H7VjeZg7gNS55Xkd',
'tx_json': {
'Account': 'rHSqhmuevNJg9ZYpspYHNnQDxraozuCk5p',
'TransactionType': 'PaymentChannelCreate',
'Amount': '"+amnt+"',
'Destination': 'rD6CGd2uL9DZUVDNghMqAfr8doTzKbEtGA',
'SettleDelay': 86400,
'PublicKey': '023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6',
'DestinationTag': 20170428
},
'fee_mult_max': 1000
}]
}";
与传统MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
或类似client(mqttNetwork);
之类的东西相比,有人能解释一下这里做了什么吗?
我也想要完成的是将这行代码修改为可以与MQTTNetwork *mqttNetwork = new mqttNetwork();
类似地初始化的内容,以便我可以从循环内部向指针分配新对象,因为此代码将用于具有无限循环的嵌入式应用程序,其中对象需要在循环迭代之间保持。
答案 0 :(得分:1)
嗯,所提到的方法和指针方法之间的基本区别在于指针是在堆上分配的,而对象client
位于堆栈上。
如果在循环中定义并初始化client
,则每次循环后都会调用析构函数,并且每次都会新创建对象。
由于对象需要在循环迭代之间保持,client
可能在循环外定义。在这种情况下,您可能希望查看您正在使用的库是否提供了clear()
或reset()
函数以及将新数据填充到对象中的方法。这样你就可以一直使用同一个对象,只需分配新数据。
注意:如果你正在使用指针方法,如果可能的话,我会考虑使用智能指针。
答案 1 :(得分:1)
为第一个问题提供答案:MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
在概念上与std::vector<double> numbers(10)
或std::unordered_map<int, double> myMap(otherMap.begin(), otherMap.end());
第一部分只是你想要构造的对象的类型,它碰巧是一个模板类型(就像std::vector
),因此要求你拼出模板参数。