Ошибка в рекурсивной шаблонной функции с использованием шаблонов STXXL в Stack Overflow

Мне нужно оптимизировать размер блока BlkSize_ параметр вектора stxxl для нахождения частичных сумм с использованием простого поиска по сетке. Поскольку единственный способ указать его для вектора stxxl, по-видимому, использовать его в качестве параметра шаблона в генераторе вектора, я понимаю, что хочу использовать некоторую рекурсивную функцию шаблона, которая бы выводила время, используемое функцией part_sum, с учетом параметра шаблона размера блока. Мне также нужно нести размер вектора в качестве параметра.

Вот мой код:

template<unsigned int size>
void TestPartialSum(int N) {
typedef stxxl::VECTOR_GENERATOR<
int,
1,
1,
size,
stxxl::RC,
stxxl::lru>::result xxlvector;

xxlvector v(N);
xxlvector res(N);
iota(v.begin(), v.end(), 5, 2);
std::cerr << "N = " << N <<  std::endl;
Profiler profiler;
std::partial_sum(v.begin(), v.end(), res.begin());
TestPartialSum<size / 2>(N);
return;
}

Но хотя struct stxxl::VECTOR_GENERATOR принимает ровно 6 параметров (class Tp_, unsigned int PgSz_, unsigned int Pages_, unsigned int BlkSize_, class AllocStr_, stxxl::pager_type Pager_) Я получаю это:

error: too few template-parameter-lists

для typedef линия.

В чем может быть проблема?

0

Решение

Похоже, вам не хватает typename сказать это result это тип:

  typedef typename stxxl::VECTOR_GENERATOR<
int,
1,
1,
size,
stxxl::RC,
stxxl::lru>::result xxlvector;

Интерпретация result зависит от аргумента шаблона size в вашем коде, и есть специальное правило в C ++, чтобы интерпретировать его как не тип если typename ключевое слово используется.
Увидеть Где и почему я должен поставить ключевые слова «template» и «typename»? для получения дополнительной информации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]