小编dot*_*dot的帖子

检查模板参数是否是std :: vector <T> :: iterator

如何检查模板参数是否是std::vector<T>::iterator

对于void类型,我们有std :: is_void.有这样的东西std::vector<T>::iterator吗?

c++ templates iterator vector

6
推荐指数
1
解决办法
731
查看次数

创建const迭代器和非const迭代器

我正在MyIterator为库编写一个迭代器类(比如说).

它是用const的重载做出一个好主意, const MyIterator像一个行为const_iteratorstd::vector同时,MyIterator充当喜欢iteratorstd::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)

c++ iterator

4
推荐指数
1
解决办法
818
查看次数

实现类的特征特化的错误消息

当库用户对模板类的模板参数使用错误类型时,如何实现错误消息?

\n\n

test.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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该代码未按预期编译。但我不能让编译器仅在用户使用错误的类型时才显示错误。

\n\n

错误信息为g++ test.cpp

\n\n
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;\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题:它没有打印我想要的错误消息 ( Sorry, foo<T> for non-integral type T has not been implemented.)

\n

c++ templates specialization sfinae template-specialization

1
推荐指数
1
解决办法
153
查看次数