簡體   English   中英

如何在可變參數包中擴展向量或數組?

[英]How to expand vectors or arrays in variadic parameter pack?

我想在可變參數模板包中擴展數組或向量。 考慮以下示例:

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

是否可以與包一起擴展數組或向量? 如果不是,哪種方法適合該用例? 最后,我想實現以下目標:

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周圍有很多實現。

我們創建一個輔助函數,該函數將接收編譯時生成的索引序列,以使用以下方式訪問向量:

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

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM