传递std:数组

Ste*_*eve 11 c++ arrays c++03

我正在尝试编写一个可以在可变大小的std :: array上工作的函数,例如:

std::array a<int,5>={1,2,3,4,5};
std::array b<int,3>={6,7,8};

myFunc(a);
myFunc(b);

void myFunc(std::array &p)
{
cout << "array contains " << p.size() << "elements"; 
}
Run Code Online (Sandbox Code Playgroud)

但是,除非我指定大小,否则它不起作用,但我希望函数从数组中获取大小.我真的不想要矢量使用的复制和动态分配,我想使用std :: array()分配的空间,并且不希望编译器为每个可能的数组大小创建函数的副本.

我想过创建一个像数组一样工作的模板,但是它会指向现有数据,而不是自己分配,但不想重新发明轮子.

这有可能吗?

bam*_*s53 9

template<typename T, size_t N>
void myFunc(std::array<T, N> const &p) {
    cout << "array contains " << p.size() << "elements"; 
}
Run Code Online (Sandbox Code Playgroud)

std::array不是一个类,不能像一个类一样使用.它是一个模板,您必须实例化模板才能获得可以像类一样使用的类.

此外,大小是数组类型的一部分.如果你想要一个大小不属于该类型的容器,那么你可以使用类似的东西std::vector.或者,您可以编写适用于具有所需功能的任何对象的模板:

template<typename Container>
void myFunc(Container const &p) {
    cout << "Container contains " << p.size() << "elements"; 
}
Run Code Online (Sandbox Code Playgroud)