Макросы
#define DEFINE_ARRAY(Name, Type) \
struct Name {
explicit Name(size_t size) : data_(new Type[size]), size_(size) {} \
~Name() { delete [] data_; } \
size_t size() const { return size_; } \
Type operator[](size_t i) const { return data_[i]; } \
Type & operator[](size_t i) { return data_[i]; } \
\
private: \
Type * data_; \
size_t size_; \
};
// usage
DEFINE_ARRAY(ArrayInt, int);
DEFINE_ARRAY(ArrayFlt, float);
Проблемы:
template <class Type>
struct Array {
explicit Array(size_t size)
~Array() {
delete [] data_;
}
size_t size() const {
return size_;
}
Type operator[] (size_t i) const {
return data_[i];
}
Type & operator[] (size_t i) {
return data_[i];
}
...
private:
Type * data_;
size_t size;
}
Array<int> ai(10);
Array<fload> af(20);
Array<int>
то он скомпилирует нужный нам класс из шаблона.