簡體   English   中英

獲取模板的類類型

[英]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)

因為template行為不會創建reduce函數。 我必須手動編寫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<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));

魔法!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM