小编jtr*_*avs的帖子

C++类模板是一个模板:模板参数无效

我有一个类模板的问题.我希望类中的私有数据是某种数字类型的向量的向量,即:

std::vector<std::vector<double> >
std::vector<std::vector<std::complex<double> > >
Run Code Online (Sandbox Code Playgroud)

但我想要矢量的类型(我使用第三方向量库和stl向量),以及要模板化的元素类型.我尝试过模板模板,但现在我不认为这是我的问题的解决方案.一个高度简化的例子是:

#include <complex>
#include <vector>
template<typename T>
class Fred {
    std::vector<T> data_;
};
int main(){
    Fred<std::vector<double> > works;
    //Fred<std::vector<std::complex<double> > doesnt_work;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如图所示它编译得很好,但如果我取消注释main中的第二行,我得到错误(g ++ 4.6):

error: template argument 1 is invalid
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?有没有人有建议的解决方案?谢谢!

c++ templates

12
推荐指数
1
解决办法
2万
查看次数

使用openmp parallel for loop意外地表现出色

我之前的评论(特别是@Zboson)之后我编辑了我的问题,以提高可读性

我一直采取行动并观察传统观点,即openmp线程的数量应与机器上的超线程数大致匹配,以获得最佳性能.但是,我观察到我的新笔记本电脑采用Intel Core i7 4960HQ,4核 - 8线程的奇怪行为.(请参阅此处的英特尔文档)

这是我的测试代码:

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <omp.h>

int main() {
    const int n = 256*8192*100;
    double *A, *B;
    posix_memalign((void**)&A, 64, n*sizeof(double));
    posix_memalign((void**)&B, 64, n*sizeof(double));
    for (int i = 0; i < n; ++i) {
        A[i] = 0.1;
        B[i] = 0.0;
    }
    double start = omp_get_wtime();
    #pragma omp parallel for
    for (int i = 0; i < n; ++i) {
        B[i] = exp(A[i]) + sin(B[i]);
    }
    double end = omp_get_wtime(); …
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading gcc openmp avx

12
推荐指数
1
解决办法
2241
查看次数

标签 统计

avx ×1

c++ ×1

gcc ×1

multithreading ×1

openmp ×1

parallel-processing ×1

templates ×1