我有一个字符串数组,我想将其解压缩为函数的参数,例如:
Blynk.setProperty(V0, "labels", "label 1", "label 2", "label 3");
其中字符串数组为:labels = {"label 1", "label 2", "label 3"}
这个数组实际上是从一个指向具有"name"成员的对象的指针数组构建的,例如:
for (unsigned int i=0; i<NUM_OBJECTS; i++) {
labels[i] = objects[i]->name;
}
其中对象数组是在编译时定义的,例如:
class Obj+ {
public:
Obj(String name) : name(name) {}
String name;
}
Obj obj1("label1");
Obj obj2("label2");
Obj obj3("label3");
Obj* objects[3] = {&obj1, &obj2, &obj3};
这也是一个Arduino项目(无法访问完整的C++功能(
这可能吗?
好吧,您可以执行以下操作:
#include <utility>
template <std::size_t ... Is>
void setProperties(std::index_sequence<Is ...>, char const * labels []) {
Blynk.setProperty(V0, "labels", labels[Is] ...);
}
char const * labels [NUM_OBJECTS] = { "l1", "l2", "l3" };
setProperties(std::make_index_sequence<NUM_OBJECTS>{}, labels);
但是,由于参数的数量在编译时是已知的,因此将标签存储在std::tuple
中并简单地使用std::apply
可能更有意义。