【发布时间】:2014-02-05 05:16:58
【问题描述】:
我有一个模板类,它的类型是迭代器。我想根据我的模板参数的 iterator_category 启用/禁用特定的成员函数。特别是,如果模板参数是双向迭代器,我想启用operator--。我的尝试是这样的:
typename std::enable_if<
std::is_base_of<std::bidirectional_iterator_tag,
MyTemplateParameter>::value,
MyType&>::type
operator --() {
//do work
return *this;
}
Clang 告诉我(大致):error: no type named 'type' in 'std::__1::enable_if<false, MyTemplateParameter>'; 'enable_if' cannot be used to disable this declaration
有没有办法完成我正在尝试的事情?
这是某些上下文中的示例:
#include <iterator>
#include <type_traits>
template <typename TagType>
class test {
public:
typename std::enable_if<
std::is_base_of<std::bidirectional_iterator_tag,
TagType>::value,
test>::type
operator --() {
return *this;
}
};
int main(){
test<std::random_access_iterator_tag> t1;
test<std::forward_iterator_tag> t2;
/*
breakTemps.cpp:13:2: error: no type named 'type' in 'std::__1::enable_if<false, test<std::__1::forward_iterator_tag> >'; 'enable_if' cannot be used to disable this declaration
std::is_base_of<std::bidirectional_iterator_tag,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
breakTemps.cpp:25:35: note: in instantiation of template class 'test<std::__1::forward_iterator_tag>' requested here
test<std::forward_iterator_tag> t2;
^
*/
}
【问题讨论】:
-
注意:MyTemplateParameter 是类模板参数
标签: c++ templates c++11 enable-if