c++ - 如何在 C++ 代码中要求某些概念?

标签 c++ generics stl c++-concepts

我如何在 C++ 中要求并检查一个参数是否是某个概念

例如,algorithm header 中的random_shuffle 函数要求其参数为RandomAccessIterators。 :

  template<typename _RandomAccessIterator>
    inline void
    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      // concept requirements
      __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
            _RandomAccessIterator>)
      __glibcxx_requires_valid_range(__first, __last);

      if (__first != __last)
        for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
          std::iter_swap(__i, __first + (std::rand() % ((__i - __first) + 1)));
    }

我想我不能在我自己的代码中使用这些 __glibcxx_function_requires 等?它们是如何工作的?您是否在代码中检查类似的内容?

最佳答案

Boost 有一个用于此的库。这可能比弄清楚如何使用您的 STL 实现者一起破解的版本更容易,也有更好的文档记录。

http://www.boost.org/doc/libs/1_40_0/libs/concept_check/concept_check.htm

关于c++ - 如何在 C++ 代码中要求某些概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484462/

相关文章:

java - 可以自动重载吗?

java - Map.Entry.comparingByValue().reversed() 的类型是什么?

c++ - 跨 VS 项目的 STL vector 损坏

c++ - 如何创建具有较低完整性级别 (IL) 的新流程?

c++ - 在 C++ 中初始化数组指针的正确方法?

c# - 使用索引 C# 返回数组的子集

c++ - 在模块(exes和dlls)之间使用STL(TR1)shared_ptr是否安全

c++ - 当消息框出现时控件消失C++ GTK

c++ - 一个已运行的应用程序,用于通知收到的 SMS - Windows Mobile 6.5

c++ - C++中哪种数据结构适合实现浏览器历史记录?