c++ - 获取模板类的类型

标签 c++ multithreading templates type-deduction template-argument-deduction

我有这样的模板函数:

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);

关于c++ - 获取模板类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42317275/

相关文章:

c++ - 将 XML 模拟为数据库

c++ - 如何推送字符数组?

c++ - 以这个程序中使用的方式使用互斥量是否正确?

c++ - C++在编译时如何知道模板类支持哪些方法?

c++ - 不允许您使用::解析枚举的错误名称是什么?

java - 如何在通过JUnit测试的多线程应用程序中调试断点?

java - 如何在 run 方法之外发送对象?

c++ - constexpr 与模板、pow 函数

c++ - 如何在 C++ 中创建类型列表的 n 路笛卡尔积?

c++ - 检测类型何时不需要调用其析构函数