我有一个类型MyStruct
我想产生一些“序列”,其中的每个实例MyStruct
从传递给它的构造另一范围的元件,以及一些功能的输出端产生。
函数本身( SomeFun
)是另一个类的成员函数,但在这个例子中,我会让它自由的功能。 但是,请记住,我可以很简单地把它放在里面的λ或做其他棘手的事情,以避免需要一个lambda,因为我确实需要实际传递this
在我的实际情况下,周围的指针。
下面是一个简化的,可测试的版本来说明我有这个问题:
#include <iostream>
#include <vector>
#include <boost/range/adaptor/transformed.hpp>
#include <functional>
template <typename RowType>
class MyStruct;
template <typename T>
int SomeFun(T t)
{
return 0;
}
template <typename Sequence>
using Converter = std::function<
MyStruct<typename Sequence::value_type>(
typename Sequence::value_type&)>;
template <typename Sequence>
boost::transformed_range<Converter<Sequence>, Sequence>
GenerateTransformedRange(const Sequence& outputs)
{
std::function<MyStruct<typename Sequence::value_type>(int)> fun =
[](const typename Sequence::value_type output)
{
return MyStruct<typename Sequence::value_type>(output, SomeFun(output));
};
return outputs | boost::adaptors::transformed(fun);
}
// some structure
template <typename T>
struct MyStruct
{
MyStruct(T t, int a)
{
}
};
int main(int argc, const char* argv[])
{
std::vector<int> vec {1, 2, 3};
for (auto element : GenerateTransformedRange(vec))
{
}
return 0;
}
从这个输出是:
main.cpp中:31:54:错误:无法转换“的boost :: range_detail ::运算|(常量InputRng&,常量升压:: range_detail :: transform_holder&)[与InputRng =标准::向量; UnaryFunction =标准::函数(INT)>]((*(常量升压:: range_detail :: transform_holder(INT)>
)(&升压:: range_detail ::转发::运算符()(T)const的[与T =标准::函数(INT)>;持有人=升压:: range_detail :: transform_holder](标准::函数(int)的>(((常量的std ::函数(INT)> *)(&乐趣))) '从'升压:: range_detail :: transformed_range(INT)>,常量性病::矢量>'到'升压)))) :: range_detail :: transformed_range(INT&)>,的std ::矢量>”返回输出| 提高::适配器::转化(乐趣); ^生成文件:25:配方目标“的obj / main.o”失败
我在做什么错在这里? 我不QUOT明白为什么它想从该类型转换。 有任何想法吗? 我使用Boost 1.55
。