在我的应用程序中,我有一个这样的类:
class sample{
thrust::device_vector<int> edge_ID;
thrust::device_vector<float> weight;
thrust::device_vector<int> layer_ID;
/*functions, zip_iterators etc. */
};
在给定索引处,每个向量都存储同一条边的相应数据。
我想编写一个函数来过滤给定层的所有边缘,如下所示:
void filter(const sample& src, sample& dest, const int& target_layer){
for(...){
if( src.layer_ID[x] == target_layer)/*copy values to dest*/;
}
}
我发现做到这一点的最好方法是使用thrust::copy_if(...)
(详细信息)
它看起来像这样:
void filter(const sample& src, sample& dest, const int& target_layer){
thrust::copy_if(src.begin(),
src.end(),
dest.begin(),
comparing_functor() );
}
这就是我们遇到问题的地方:
这comparing_functor()
是一个一元函数,这意味着我不能将我的target_layer
值传递给它。
任何人都知道如何解决这个问题,或者有一个想法来实现这一点,同时保持类的数据结构完整?