我尝试制作一个将在多个线程上运行for循环的函数。 为了使该函数更好地与for循环中应使用的各种函数一起使用,我决定使用模板。 对于每个函数的返回类型,我使用了一个简单的方法:
template <typename T>
这没有任何问题。但是对于函数可能需要的参数,我使用以下模板构造:
template <typename ...Args>
所以现在我的代码看起来像这样:
template <typename T, typename ...Args>
T threadedFor(T func(Args... args), Args... args, int nThreads, unsigned int max, unsigned int min = 0) {
T result;
/* ... */
return result;
}
现在的问题是我不知道如何在函数调用中传递Args... args
。
我尝试了几种方法,例如:
threadedFor(function(1), 4, 5, 0);
或者这个:
threadedFor(function, 1, 4, 5, 0);
假设我的论点是1。
也很高兴知道这个结构typename ...Args
的名字,因为我在Google上找不到任何东西...
答案 0 :(得分:3)
多亏了“ NathanOliver- Reinstate Monica”,我找到了这个结构的名称,也找到了解决我问题的方法。参数包必须始终是函数的最后一个参数。所以像这样改变我的功能:
template <typename T, typename ...Args>
T threadedFor(T func(Args... args), int nThreads, unsigned int min, unsigned int max, Args... args) {
解决了问题。