gpt4 book ai didi

c++ - 在模板类中编写的 lambda 函数不支持 restrict(...) 吗?

转载 作者:行者123 更新时间:2023-11-30 05:02:19 24 4
gpt4 key购买 nike

最近我一直在使用 amp (C++ Accelerated Massive Parallelism)。使用此框架需要大量带有 restrict(amp) 的 lambda 表达式。但是,当我试图在模板类中编写这些时,编译器抛出错误消息 Error C2760 syntax error: unexpected token 'identifier', expected '{'。但是,它在没有 restricted(amp) 或在模板类之外的情况下也能完美运行。下面是可以重现此类问题的代码:

//matrix2.cpp
#pragma once
#include "stdafx.h"

namespace rin
{
template <int V0, int V1>
class Matrix2
{

public:
Matrix2() : raw_(V0 * V1), view_(concurrency::extent<2>(V0, V1), raw_)
{
concurrency::parallel_for_each(concurrency::extent<2>(V0, V1),
[=](concurrency::index<2> idx)
restrict(amp)
{

});
auto fun = [=]() restrict(cpu)
{
std::cout << "It does not compile in a template class." << std::endl;
};
fun();
auto fun1 = [=]()
{
std::cout << "It does compile in a template class without the restrict(...)." << std::endl;
};
fun1();
}
std::vector<double> raw_;
concurrency::array_view<double, 2> view_;
};
}

//main.cpp
#include "stdafx.h"
#include "matrix.h"
using namespace rin;
using namespace concurrency;
int main()
{
Matrix2<5, 5> mat;
auto fun = [=]() restrict(cpu)
{
std::cout << "But outside the template class it does work!" << std::endl;
};
fun();
system("pause");
return 0;
}

最佳答案

我最近遇到了同样的问题。此错误是由 C++ 编译器选项“一致性模式”(项目属性 > C/C++ > 语言)引起的,该选项似乎在最近的 VS 版本中设置为默认启用。将此选项设置为 no,您的代码应该可以编译。

enter image description here

关于c++ - 在模板类中编写的 lambda 函数不支持 restrict(...) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com