C++相談室 part46
■ このスレッドは過去ログ倉庫に格納されています
0233デフォルトの名無しさん
2006/01/21(土) 02:39:35こんなんじゃダメなの?(行数詰めたから見難いけど)
template <typename T> struct array_2d {
T* data_; int size1_, size2_;
array_2d(int size1, int size2) : data_(new T[size1 * size2]) , size1_(size1), size2_(size2){}
~array_2d() {delete[] data_;}
struct proxy {
array_2d* parent_; int offset_;
proxy(array_2d* parent, int offset) : parent_(parent), offset_(offset) {}
operator T*() {return parent_->data_ + offset_;}
};
proxy operator[](int x) {return proxy(this, size2_ * x);}
};
template <typename T> void assign(T& a) {
for (int i = 0; i < 2; ++i) for (int j = 0; j < 3; ++j) a[i][j] = 10 * i + j;
}
#include <iostream>
int main() {
array_2d<int> a(2, 3); assign(a);
for (int i = 0; i < 6; ++i) std::cout << a.data_[i] << ' ';
std::cout << std::endl;
int b[2][3]; assign(b);
for (int i = 0; i < 6; ++i) std::cout << reinterpret_cast<int*>(b)[i] << ' ';
std::cout << std::endl;
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています