*未指定*在C ++ typedef语句中的含义是什么?

时间:2011-04-07 12:08:29

标签: c++ c++11 typedef declaration

我看到像

这样的陈述
  

typedef * unspecified * value_type;

     

typedef * unspecified * reference;

在Boost :: multi_array类的声明中。

    namespace boost {

template <typename ValueType, 
          std::size_t NumDims, 
          typename Allocator = std::allocator<ValueType> >
class multi_array {
public:
// types:
  typedef ValueType                             element;
  typedef *unspecified*                         value_type;
  typedef *unspecified*                         reference;
  typedef *unspecified*                         const_reference;
  typedef *unspecified*                         difference_type;
  typedef *unspecified*                         iterator;
  typedef *unspecified*                         const_iterator;
  typedef *unspecified*                         reverse_iterator;
  typedef *unspecified*                         const_reverse_iterator;
  typedef multi_array_types::size_type          size_type;
  typedef multi_array_types::index              index;
  typedef multi_array_types::index_gen          index_gen;
  typedef multi_array_types::index_range        index_range;
  typedef multi_array_types::extent_gen         extent_gen;
  typedef multi_array_types::extent_range       extent_range;
  typedef *unspecified*                         storage_order_type;

*未指明*在这里意味着什么?这是C ++ 11标准吗?

5 个答案:

答案 0 :(得分:13)

我在文档中假设这个,而不是可编译的代码,因为它不可编译。

通常这样做是为了表明typedef可以使用,但是它的别名类型取决于实现,并且不被视为公共接口的一部分。

在这种情况下,可编译头文件包含以下行的声明:

typedef typename super_type::value_type value_type;

其中别名类型在基类中定义。深入挖掘,反过来来自另一个基类,实际类型深深埋藏在实现细节中,具有不同的定义取决于数组的维数;对于一维数组,此特定类型为ValueType,对于更高维度,此multi_array<ValueType,NumDims-1>类型。

答案 1 :(得分:9)

看起来它是从this documentation复制的。 *unspecified*只是意味着,它与您完全无关,而且它是一个实现细节。不要再深入了解它,只是承认,typedef就在那里。

答案 2 :(得分:2)

我刚刚打开了multi_array.hpp标头,并且(正如预期的那样)它没有这样的typedef,但它看起来像这样:

    template<typename T, std::size_t NumDims,typename Allocator>
    class multi_array :
        public multi_array_ref<T,NumDims>
    {
      typedef multi_array_ref<T,NumDims> super_type;
    public:
      typedef typename super_type::value_type value_type;
      typedef typename super_type::reference reference;
      typedef typename super_type::const_reference const_reference;
      typedef typename super_type::iterator iterator;
      typedef typename super_type::const_iterator const_iterator;
      typedef typename super_type::reverse_iterator reverse_iterator;
      typedef typename super_type::const_reverse_iterator const_reverse_iterator;
      typedef typename super_type::element element;
      typedef typename super_type::size_type size_type;
      typedef typename super_type::difference_type difference_type;
      typedef typename super_type::index index;
      typedef typename super_type::extent_range extent_range;
   // ...

如果您正在阅读reference pages for boost::multi_array,那么这意味着您应该使用该typedef,而不是您自己的类型。我想在编写模板类时应该真正使用那些typedef。

答案 3 :(得分:1)

没有。这意味着特定的实现可以将其定义为任何它想要的。这是一个规范 - 不是实际可编译的C ++。

答案 4 :(得分:0)

unspecified是在boost :: units :: detail命名空间中定义的空结构。

它被用作父类中的占位符返回类型(认为继承),利用它可以在具有适当返回类型的任何未来派生类中重载的事实。 通用编程中可能还有其他一些用途。 当我发现更多例子时,我会继续添加。