我问了一个关于使用lambda来实现早期类似问题的问题,wasn't able to get this working所以我尝试使用仿函数来解决问题。无论如何,这可能更整洁,因为它不涉及构建std::function
个对象并且更接近example case set out in the documentation。
这是一个简单的设置,说明了我的问题:
#include <boost/range/adaptor/transformed.hpp>
#include <vector>
// some structure
template <typename T>
struct MyStruct
{
MyStruct(T t)
{
}
};
template <typename T>
struct Converter
{
using return_type = MyStruct<T>;
return_type operator()(const T& value)
{
return return_type(value);
}
};
int main(int argc, const char* argv[])
{
std::vector<int> vec {1, 2, 3};
auto val = vec | boost::adaptors::transformed(Converter<int>());
return 0;
}
当我尝试编译时,我收到以下错误消息:
/home/user/packages/boost/mpl/eval_if.hpp:38:31:错误:没有命名的类型 '
中的'type'boost::mpl::eval_if<boost::is_same<boost::use_default, boost::use_default>, boost::result_of<const Converter<int>(int&)>, boost::mpl::identity<boost::use_default> >::f_ {aka struct boost::result_of<const Converter<int>(int&)>}
'
我不知道该怎么做。我无法发现代码中的任何错误。有什么想法吗?
答案 0 :(得分:4)
该错误告诉您boost::result_of<const Converter<int>(int&)>
没有type
成员。换句话说,当使用const Converter<int>
对象时,函数调用操作符不起作用。一旦你知道了问题,很容易看出错误:
return_type operator()(const T& value) const
// ^^^^^
{
return return_type(value);
}