[英]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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.