Вы можете создать класс-оболочку следующим образом:
template <typename T>
class Foo {
private:
T *m_ptr;
public:
Foo(void *area, int size) {
m_ptr = new(area) T(size);
}
Foo(const Foo &) = delete;
~Foo() {
m_ptr->~T();
}
void operator=(const Foo &) = delete;
T *operator->() {
return m_ptr;
}
};
Использование:
void f(int size) {
char v[sizeof(aclass)+size];
Foo<aclass> p(v, size);
p->doSomething(); // call a function from aclass
}
Обратите внимание, что вы используете расширение GCC, так как size
не является компиляцией-time-константа.
Если бы это была константа времени компиляции, тогда вы могли бы поместить v
в Foo
(и size
будет параметром шаблона), поэтому f
будет проще.