在C++中使用 STXXL 模板的递归模板函数中出错

Error in a recursive template function using STXXL templates in C++

本文关键字:函数 出错 递归 STXXL C++      更新时间:2023-10-16

我需要优化 stxxl 向量的块大小BlkSize_参数,以便使用简单的网格搜索找到部分和。由于为 stxxl 矢量指定它的唯一方法似乎将其用作矢量生成器中的模板参数,我知道我想使用一些递归模板函数,该函数将输出给定块大小模板参数partial_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行。

可能是什么问题?

看起来您缺少一个typename来判断result是一种类型:

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

result的解释取决于代码中size的模板参数,并且C++有一个特殊规则,将其解释为非类型,除非使用 typename 关键字。请参阅我必须在哪里以及为什么必须放置"模板"和"类型名称"关键字?了解更多信息。