У меня есть шаблон функции, как это:Получить типы классов шаблонов
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)
возможно ['declytype'] (http://en.cppreference.com/w/cpp/language/decltype)? – user463035818
btw «Я не могу начать thread by:» thats, потому что 'reduce' не является функцией, это просто шаблон – user463035818
, где вы называете' std :: thread t1 (...) ', если это не внутри шаблона , запись 'declytype (someObject)' не намного короче, чем просто набирать 'typeOfObject'. С другой стороны, если он находится внутри шаблона, то, возможно, вы уже знаете типы – user463035818