返回类型模板(enable_if)禁止什么
What does the return type template(enable_if) prohibit?
以下摘自vs 2010 map实现,该成员函数在父类_Tree中定义,该类_Tree位于文件xtree中。
template<class _Valty>
typename _STD tr1::enable_if<!_STD tr1::is_same<const_iterator,
typename _STD tr1::remove_reference<_Valty>::type>::value,
iterator>::type
insert(const_iterator _Where,
_Valty&& _Val)
{ // try to insert node with value _Val using _Where as a hint
return (_Insert(_Where,
this->_Buynode(_STD forward<_Valty>(_Val))));
}
实际上,这个函数是iterator insert (iterator position, const value_type&x),有趣的是它的返回类型!这是什么意思?从我的理解,它禁用模板实例化,如果value_type(即。 _Valty )一样 const_iterator 。
但是,在这种情况下,由于没有从const_iterator到value_type的隐式转换,因此这看起来是多余的。
我相信我有一些我不明白的东西,它是什么?返回类型模板禁止什么?
还有其他的insert
成员接受一个对象范围,[iterator, iterator)。
enable_if
仅在涉及的类型不同时启用此功能,以避免过载解析的问题。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 使用if-else将数字转换为单词
- 为什么简单的算术减法在"if"条件下不起作用?
- 以在Qt中的IF语句中设置时间延迟
- 将 OR 放入 if 语句会导致 ISO C++禁止指针和整数之间的比较(f 允许)