3

のクラスの種類が取得します。 templateで定義されているすべてのタイプを手動で書き込む必要があります。以下のように:私は別の種類を持っている場合は私はこのように、テンプレート機能を持つテンプレート

std::thread t1(reduce<SomeIterator, SomeNumber, SomeFunc>, iterator1, iterator2, 0, sum) 

は私が書く必要があります:

std::thread t1(reduce<AnotherIterator, AnotherNumber, Func>, 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); 
} 

としてそれを使用する:あなたはtemplate argument deductionを利用するヘルパー関数テンプレートを作成することができます

std::thread t1(reduce<typeof(X), typeof(Y), typeof(Z)>, iterator1, iterator2, 0, sum) 
+3

多分['declytype'](http://en.cppreference.com/w/cpp/language/decltype)? – user463035818

+1

btw "スレッドでは開始できません:" thatsは 'reduce'が関数ではないので、テンプレートです。 – user463035818

+0

テンプレート内にない場合は' std :: thread t1(...) 'を呼び出します'declytype(someObject)'の記述は 'typeOfObject'というだけではありません。一方、それがテンプレートの中にある場合、多分あなたは既に型を知っています – user463035818

答えて

4

のようなクラスの種類を計算する方法がありますちょうどラムダを使用してください。

std::thread t1([=](){reduce(iterator1, iterator2, 0, sum)); 

マジック!

6

std::thread t1 = reduce_helper(iterator1, iterator2, 0, sum); 
関連する問題