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
.
可能更有意义
我有一个字符串数组,我想将其解包为函数的参数,例如:
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
.