我正在尝试编写一个可以在可变大小的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()分配的空间,并且不希望编译器为每个可能的数组大小创建函数的副本.
我想过创建一个像数组一样工作的模板,但是它会指向现有数据,而不是自己分配,但不想重新发明轮子.
这有可能吗?
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)
| 归档时间: |
|
| 查看次数: |
7129 次 |
| 最近记录: |