繁体   English   中英

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

[英]Error in a recursive template function using STXXL templates in C++

我需要优化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 ,并且除非使用typename关键字, 否则 C ++中有一个特殊规则将其解释为非类型。 看看我在哪里以及为什么要放置“template”和“typename”关键字? 了解更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM