Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何将数组值解压缩为函数参数_C++_Arrays_Macros - Fatal编程技术网

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

C++ C++;如何将数组值解压缩为函数参数,c++,arrays,macros,C++,Arrays,Macros,我有一个字符串数组,我想将其解包为函数的参数,如: Blynk.setProperty(V0,“标签”、“标签1”、“标签2”、“标签3”) 其中字符串数组为: labels={“标签1”、“标签2”、“标签3”} 此数组实际上是由指向具有“name”成员的对象的指针数组构建而成的,如: for (unsigned int i=0; i<NUM_OBJECTS; i++) { labels[i] = objects[i]->name; } 这也是一个ARDUIO项目(没有

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

Blynk.setProperty(V0,“标签”、“标签1”、“标签2”、“标签3”)

其中字符串数组为:
labels={“标签1”、“标签2”、“标签3”}

此数组实际上是由指向具有“name”成员的对象的指针数组构建而成的,如:

for (unsigned int i=0; i<NUM_OBJECTS; i++) {
    labels[i] = objects[i]->name;
}

<强>这也是一个ARDUIO项目(没有访问完全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);
#包括
模板
void setProperties(std::index_序列,char const*标签[]){
Blynk.setProperty(V0,“标签”,标签[Is]…);
}
char const*标签[NUM_OBJECTS]={“l1”、“l2”、“l3”};
setProperties(std::make_index_sequence{},标签);

但是,由于参数的数量在编译时是已知的,因此将标签存储在
std::tuple
中并简单地使用
std::apply
可能更有意义。您可以执行以下操作:

#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);
#包括
模板
void setProperties(std::index_序列,char const*标签[]){
Blynk.setProperty(V0,“标签”,标签[Is]…);
}
char const*标签[NUM_OBJECTS]={“l1”、“l2”、“l3”};
setProperties(std::make_index_sequence{},标签);

然而,由于参数的数量在编译时是已知的,因此将标签存储在
std::tuple
中并简单地使用
std::apply
可能更有意义。“其中对象数组是在编译时定义的。”向我们展示。一个适当的.我假定
Blynk.setProperty(V0,“标签”,标签[0],标签[1],标签[2])不太令人满意?@igortandtnik标签数组可以是任意大小的。@Asteroswithwings提供了示例。“其中对象数组是在编译时定义的。”向我们展示。一个适当的.我假定
Blynk.setProperty(V0,“标签”,标签[0],标签[1],标签[2])
有些不令人满意?@igortandtnik标签数组可以是任意大小的。@Asteroswithwings提供的示例
std::array
实现了元组接口,因此您可以将其与
std::apply
一起使用:)太棒了!我不确定std::tuple是否可用于Arduino?
std::array
实现了tuple接口,因此您也可以将其与
std::apply
一起使用:)太棒了!我不确定std::tuple是否可用于Arduino?