【问题标题】:c++11 Creating data member for variable-size std::array in class definitionc++11在类定义中为可变大小std::array创建数据成员
【发布时间】:2013-04-25 17:52:49
【问题描述】:

我对 std::array 和将它传递给不同的类有点困惑。我想定义一个在其构造函数中接受 std::array 的类,并使用它来设置成员变量。但是,由于数组的大小可能是可变的,我不确定它是如何转换为类和成员变量声明的。例如:

// array_param.h
#include <array>

class ArrayParam
{
  public:
    //constructor?
    ArrayParam(std::array<long, ?>& entries);

    // member variable?
    std::array<long, ?> param_entries;
};

...和...

// array_param.cpp
#include "array_param.h"

ArrayParam::ArrayParam(std::array<long, ?>& entries)
{
  param_entries = entries;
}

这样做的动机是,例如,在我的主程序中,我有两个或更多定义明确的数组,它们具有已知的固定大小。我想对这些不同大小的数组执行相同的操作,因此需要这样一个类来处理任何大小的数组的这些共享操作。

任何帮助都非常感谢,非常感谢!

【问题讨论】:

    标签: c++ arrays variables c++11 parameters


    【解决方案1】:

    std::array 的大小必须在编译时知道。由于您提到您的数组具有已知的固定大小,因此您可以将数组大小设为模板参数。

    // array_param.h
    #include <array>
    #include <cstdlib>
    
    template<std::size_t N>
    class ArrayParam
    {
      public:
        //constructor?
        ArrayParam(std::array<long, N>& entries);
    
        // member variable?
        std::array<long, N> param_entries;
    };
    

    【讨论】:

      【解决方案2】:

      std::array 的长度需要在编译时知道。

      如果没有,请考虑改用std::vector

      来自http://www.cplusplus.com/reference/array/array/

      数组不保留除它包含的元素之外的任何数据 (甚至不是它的大小,它是一个模板参数,在编译时固定 时间)。

      基于此,ArrayParam 类可能没有太多用处。我会考虑 typedef'ing 特定类型的数组,例如

      enum { ArrayLength = 1024 };
      typedef std::array< long, ArrayLength >   LongArray;
      
      // use and test
      LongArray myArray;
      assert( myArray.size() == ArrayLength );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-05
        • 2014-07-31
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多