【发布时间】:2021-03-22 02:06:39
【问题描述】:
我正在尝试创建并返回一个 boost:any_range 仅包含一个对象(我不知道这是否是核心问题),但我收到以下错误:
- 错误 C2893:无法专门化函数模板
'range_iterator
::type boost::range_adl_barrier::begin(T &)' - 注意:使用以下模板参数:
- 注意:'T=const WrappedRange'
- 错误 C2672:“结束”:找不到匹配的重载函数
- 错误 C2893:无法专门化函数模板
'range_iterator::type boost::range_adl_barrier::end(T &)' - 注意:使用以下模板参数:注意:'T=const
WrappedRange'
下面可以找到相关代码sn-ps:
- 这是我要调用的函数,但在编译过程中失败:
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)
{
}
...
}
感谢您的任何建议!
【问题讨论】:
标签: c++ boost compiler-errors boost-range boost-iterators