簡體   English   中英

將可變參數模板 function arguments 傳遞給另一個 function

[英]Passing variadic template function arguments to another function

直截了當,有一個類似的問題,但其核心不同。

所以,這就是我想要做的 - 假設我有一個可變參數模板 function 它需要T...args和一個 function 類型FuncT funcName ,所以這是我們目前所擁有的:

template<typename FuncT, typename ...T>
void myFunction(FuncT (*funcName), T ...args);

現在,我想將我的 function 存儲在void (*)() (此存儲功能)。 這工作得很好。

現在,我可以將 function 傳遞給我的 function,如下所示:

template<typename FuncT, typename T>
void myFunction(FuncT (*funcName), T singleArgument){
  funcName(T singleArgument);
}

void function(int i){
  std::cout << i;
}

int main(){
  myFunction(function, 5);
}

好的,我們成功地傳遞了一個參數,但是我傳遞給myFunction()的 function接受可變數量的參數 如果我傳遞function2(int a, int b)而不僅僅是function(int a)怎么辦? 好吧,這就是我的問題所在

當我使用:

template<typename FuncT, typename T>
void myFunction(FuncT (*funcName), T singleArgument){
  funcName(/* What should i write here */);
}

void function1(int a){
  std::cout << a;
}

void function2(int a, int b){
  std::cout << a << " " << b;
}

int main(){
  myFunction(function1, 42);
  myFunction(function2, 42, 0);
}

然后我args ,我可以將其傳遞給接受variadic template arguments的 function ,但我的char只接受一些固定數量的int和其他。

我建議你使用完美轉發:

#include <iostream>

template<typename FuncType, typename... Args>
void myFunction(FuncType funcName, Args&&... args){
  funcName(std::forward<Args>(args)...);
}

void function1(int a){
  std::cout << a;
}

void function2(int a, int b){
  std::cout << a << " " << b;
}

int main(){
  myFunction(function1, 42);
  myFunction(function2, 42, 0);
}

https://coliru.stacked-crooked.com/a/a715dc67a30c4ce5

暫無
暫無

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

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