如何检查模板参数是否是std::vector<T>::iterator?
对于void类型,我们有std :: is_void.有这样的东西std::vector<T>::iterator吗?
我正在MyIterator为库编写一个迭代器类(比如说).
它是用const的重载做出一个好主意,
const MyIterator像一个行为const_iterator的std::vector同时,MyIterator充当喜欢iterator的std::vector?
图书馆用户/开发人员会感到困惑吗?
实施将如下:
// std::iterator example
#include <iostream> // std::cout
#include <iterator> // std::iterator, std::input_iterator_tag
class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
mutable int* p;
public:
MyIterator(int* x) :p(x) {}
MyIterator(const MyIterator& mit) : p(mit.p) {}
MyIterator& operator++() {++p;return *this;}
MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
bool operator==(const MyIterator& rhs) {return p==rhs.p;}
bool operator!=(const MyIterator& rhs) {return p!=rhs.p;}
const int& operator*() const {return …Run Code Online (Sandbox Code Playgroud) 当库用户对模板类的模板参数使用错误类型时,如何实现错误消息?
\n\ntest.cpp(从这里改编)
\n\n#include <type_traits>\ntemplate <typename T, typename Enable = void>\nclass foo; // Sorry, foo<T> for non-integral type T has not been implemented.\n\ntemplate <typename T>\nclass foo<T, typename std::enable_if<std::is_integral<T>::value>::type>\n{ };\n\nint main()\n{\n foo<float> x;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该代码未按预期编译。但我不能让编译器仅在用户使用错误的类型时才显示错误。
\n\n错误信息为g++ test.cpp
test.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99:\ntest.cpp:11:13: error: aggregate \xe2\x80\x98foo<float> x\xe2\x80\x99 has incomplete type and cannot be defined\n foo<float> x;\nRun Code Online (Sandbox Code Playgroud)\n\n问题:它没有打印我想要的错误消息 ( Sorry, foo<T> for non-integral type T has not been implemented.)