【发布时间】:2021-02-01 16:51:41
【问题描述】:
欢迎,这是一个非常罕见的用例问题。
所以,这就是我想要做的——假设我有一个可变参数模板函数,它接受 T ...args 和一个函数类型 FuncT funcName,所以这是我们目前所拥有的:
template<typename FuncT, typename ...T>
void myFunction(FuncT (*funcName), T ...args);
现在,我想将我的函数存储在void (*)()(这个存储函数)。这工作得很好。
std::deque<void (*)()> functions;
func = functions.front();
func(std::forward<T>(args)...); //args is vardict template argument
现在,我可以将一个函数传递给我的函数,如下所示:
template<typename FuncT, typename T>
int sharedArgument;
void setArg(int x){
sharedArgument = x;
}
template<typename FuncT>
void myFunction(FuncT funcName){
funcName(sharedArgument);
}
void function(int i){
std::cout << i;
}
int main(){
setArg(5);
myFunction(function);
}
现在,我知道这是不必要的,但我想提出一个我遇到麻烦的更复杂的问题。
当我想存储参数时,我可能会使用std::tuple,它的设计来存储参数,但是
主要问题是:
我如何在元组中存储可变数量的参数然后完美地将它们作为普通参数转发给某个函数,以便函数接收
function(std::tupleArgumentsHere...);
将其读作
function(5, 42, "yes", 3.14);
我将使用它来存储参数并将它们传递给std::thread。
谢谢你,干杯。
【问题讨论】:
-
苏
std::bind?
标签: c++ variadic-templates stdtuple