#include<iostream>
template<typename T, size_t S>
class Array {
private:
T m_Data[S];
public:
constexpr int Size() const { return S; }
T& operator[](size_t index) { return m_Data[index]; }
const T& operator[](size_t index) const { return m_Data[index]; }
T* Data() { return m_Data; }
const T* Data() const { return m_Data; }
//Array(int size) {
// //在栈上分配空间
// //m_Data = (int*)alloca(size);
//}
};
int main() {
//int array[5];
int size = 5;
Array<int, 5> data;
static_assert(data.Size() < 10, "Size is too large!");
memset(&data[0], 0, data.Size() * sizeof(int));
data[1] = 10;
data[4] = 20;
for (int i = 0; i < data.Size(); i++) {
std::cout << data[i] << std::endl;
}
Array<std::string, data.Size()> newArray;
newArray[0] = "Hello";
newArray[4] = "World";
for (int i = 0; i < newArray.Size(); i++) {
std::cout << newArray[i] << std::endl;
}
std::cin.get();
}