获取模板的 类 类型
Get types of classes for templates
我有这样的模板函数:
template<class RandomAccessIterator, class T, class Func>
T reduce(RandomAccessIterator first, RandomAccessIterator last, const T& initial_value, Func func) {
// Some code;
return cur_value;
}
我无法通过以下方式启动线程:
std::thread t1(reduce, iterator1, iterator2, 0, sum)
因为 reduce
函数因 template
行为而未创建。
我必须手动编写 template
中定义的所有类型。喜欢:
std::thread t1(reduce<SomeIterator, SomeNumber, SomeFunc>, iterator1, iterator2, 0, sum)
如果我有其他类型我应该写:
std::thread t1(reduce<AnotherIterator, AnotherNumber, Func>, iterator1, iterator2, 0, sum)
我怎样才能使这个过程自动化?有没有一种方法可以计算 类 的类型,例如:
std::thread t1(reduce<typeof(X), typeof(Y), typeof(Z)>, iterator1, iterator2, 0, sum)
您可以编写辅助函数模板来利用 template argument deduction:
template<class RandomAccessIterator, class T, class Func>
std::thread reduce_helper(RandomAccessIterator first, RandomAccessIterator last, const T& initial_value, Func func) {
return std::thread(reduce<RandomAccessIterator, T, Func>, first, last, initial_value, func);
}
然后将其用作:
std::thread t1 = reduce_helper(iterator1, iterator2, 0, sum);
只需使用 lambda。
std::thread t1([=](){reduce(iterator1, iterator2, 0, sum));
魔法!