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

C++ How to unpack array values as function arguments

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

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;
}

其中objects数组是在编译时定义的,例如:

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.

可能更有意义