почему это не компилируется?
template <typename T>
class Pool{
char Buff[sizeof(T)*256];
public:
Pool(){
T* item = reinterpret_cast<T*>(&Buff[0]);
for(int i =0 ; i<256;i++)
item[i] = new(&item[i]) T();
}
~Pool(){
T* item = reinterpret_cast<T*>(&Buff[0]);
for(int i =0 ; i<256;i++)
item[i] -> ~ T();
}
void reset(unsigned int i){
T* item = reinterpret_cast<T*>(&Buff[0]);
item[i]->~T();
item[i]->T();
}
}
Чего я, очевидно, хочу добиться, так это вызвать новое размещение в необработанном массиве памяти (это должно вызвать конструктор в порядке). Затем я хочу вызвать деструктор и конструктор элементов в массиве. Проблема в том, что Item является шаблоном, поэтому, если я использую
Pool<FooBar>
компилятор ожидает найти "FooBar()" и "~FooBar()" вместо "T()" и "~T()". есть ли какой-то особый синтаксис для этого?
Я использую C++03, а не C++11.