C++ 如何将数组值解压缩为函数参数



我有一个字符串数组,我想将其解压缩为函数的参数,例如:

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可能更有意义。

相关内容

  • 没有找到相关文章

最新更新