2

我对 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;
}

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

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

4

2 回答 2

3

的大小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;
};
于 2013-04-25T17:59:59.830 回答
1

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 );
于 2013-04-25T17:55:07.337 回答