gpt4 book ai didi

c++ - 如何在可变参数包中扩展 vector 或数组?

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:59 25 4
gpt4 key购买 nike

我想在可变参数模板包中扩展数组或 vector 。考虑以下示例:

template <typename T>
int GetArgValue(std::string name,T& value){
cout<<"GetArgumentValue(): name="<<name<<", val="<<value<<endl;
//Set value
//...
return 0;
}

template<typename ... Tn>
int GetArgValues(std::vector<std::string> keys, Tn&... values){
//Check sizes
//...

//Call GetArg over pack
int retCodes[] = { GetArgValue(keys,values)...};//not possible

//...
return 0;
}

是否可以将数组或 vector 与包一起展开?如果不是,适合此用例的方法是什么?最后我想实现的是:

double arg1;
int arg2;
std::string arg3;
GetArgValues({"firstArg","secondArg","thirdArg"},arg1,arg2,arg3);

甚至更好(如果可能):

GetArgValues( {"firstArg",arg1}, {"secondArg",arg2}, {"thirdArg", arg3} );

希望这个例子很清楚。感谢大家的建议。

最佳答案

您可以为此使用 std::index_sequence。请注意,这是 C++14,但如果需要,还有很多 C++11 的实现。

我们制作了一个辅助函数,它将接收编译时生成的索引序列来访问 vector :

template<typename ... Tn, std::size_t...  Idx>
int GetArgValuesHelp(std::index_sequence<Idx...>,
std::vector<std::string> keys,
Tn&... values){
int retCodes[] = { GetArgValue(keys[Idx],values)...};

return 0;
}

然后调用该函数并从 GetArgValues 生成索引:

template<typename ... Tn>
int GetArgValues(std::vector<std::string> keys, Tn&... values){
//Check sizes
//...

return GetArgValuesHelp(std::index_sequence_for<Tn...>{}, keys, values...);
}

Live Demo

关于c++ - 如何在可变参数包中扩展 vector 或数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36423953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com