boost::has_range_iterator的实现及测试
在C++中,我们经常需要检查一个类型是否具有某些成员。而boost库中提供了一个非常方便的工具——type traits。type traits是模板元编程的重要组成部分,它可以让我们在编译期对类型进行各种操作。
其中,boost::has_range_iterator是一种非常有用的trait,它用于检测一个类型是否具有迭代器,即该类型是否可以进行范围遍历。接下来,我们将详细介绍它的实现及测试。
- 实现
在boost库中,has_range_iterator的实现涉及到两个辅助结构体:sfinae_helper和yes_no_type。其中yes_no_type用于在函数返回值中传递真假值,而sfinae_helper则利用SFINAE技术(Substitution Failure Is Not An Error)来推断一个类型是否具有某个成员。具体代码如下:
template<typename T>
struct has_range_iterator
{
private:
template<typename U>
static auto test(int) -> typename std::enable_if<
std::is_same<decltype(std::