我正在尝试创建并返回一个 boost:any_range 只包含一个对象(我不知道这是否是核心问题),但我收到以下错误:
- 错误 C2893:无法专门化函数模板 'range_iterator<C,void>::type boost::range_adl_barrier::begin(T &)'
- 注意:使用以下模板参数:
- 注意:'T=const WrappedRange'
- 错误 C2672:“结束”:未找到匹配的重载函数
- 错误 C2893:无法专门化函数模板
'range_iterator<C,void>::type boost::range_adl_barrier::end(T &)' - 注意:使用以下模板参数:注意:'T=const
WrappedRange'
您可以在下面找到相关的代码片段:
- 这就是我要调用的函数,但在编译过程中失败了:
const HandleRange BasicCollection::GetPartHandles() const
{
return HandleRange
//return -> also tried this
{
Handle(GenericHandleManager::CreatePartHandleValue(GenericHandleManager::GetPartIdx(_collectionHandle)))
};
}
不知何故,这是可行的,但这并不是很干净:
const HandleRange BasicCollection::GetPartHandles() const
{
auto container = { _collectionHandle };
return container | boost::adaptors::transformed([collectionHandle = _collectionHandle](const auto & index_value)
{
return HandleRange::value_type
{
Handle(GenericHandleManager::CreatePartHandleValue(GenericHandleManager::GetPartIdx(collectionHandle)))
};
});
}
- 这是应返回的 HandleRange 类型:
/**
* Defines an alias representing a boost range for handles.
*/
using HandleRange = boost::any_range<Handle, boost::forward_traversal_tag, const Handle>;
- 使用的 Handle 对象:
class Handle
{
public:
/**
* Construct a handle from a handle value.
* @param value The handle's value.
*/
inline explicit Handle(int_fast64_t value) noexcept : _value(value)
{
}
...
}
感谢您的任何建议!