我正在尝试将一个lambda表达式分配给std::function
,如下所示:
std::function<void>(thrust::device_vector<float>&) f;
f = [](thrust::device_vector<float> & veh)->void
{
thrust::transform( veh.begin(), veh.end(), veh.begin(), tanh_f() );
};
我遇到了一个错误:
error: incomplete type is not allowed
error: type name is not allowed
我认为它指的是 thrust::device_vector<float>
。我尝试对参数进行命名和类型定义:
typedef typename thrust::device_vector<float> vector;
std::function<void>(vector&) f;
f = [](vector & veh)->void
{
thrust::transform( veh.begin(), veh.end(), veh.begin(), tanh_f() );
};
毫无结果。但是,如果我只使用lambda(而不是
std::function
),它就可以工作:typedef typename thrust::device_vector<float> vector;
auto f = [](vector & veh)->void
{
thrust::transform( veh.begin(), veh.end(), veh.begin(), tanh_f() );
};
我错过了什么吗? PS:我正在使用
nvcc release 6.5,V6.5.12
和g++(Debian 4.8.4-1)4.8.4
进行编译。
int(int) fp;
是否声明了一个接受 int 并返回 int 的函数指针? - user253751int(int)
是一种类型(函数类型,而不是指针类型!),但变量的声明必须使用中缀符号:(又名“用后声明”)。我们将该函数称为fp(5);
因此声明必须是int(*fp)(int)
,其中*
是必要的,以使其成为指针类型,并且括号是必要的,以防止*
与返回值关联。 - M.Mint[5] arr;
。 - M.Mstd::function<void>(thrust::device_vector<float&>) f;
是一个有效的函数指针声明。 - user253751