Дан следующий класс:
template<class T, std::size_t N>
class Example {
struct Element {
std::size_t id;
std::aligned_storage_t<sizeof(T), alignof(T)> actual_data;
};
std::array<Element, N> data;
public:
template<typename ...Args>
void emplace_insert(Args&&... args) {
auto some_id = 123; //for example
//placment new
new (&data[some_id]) Element(some_id, T(std::forward<Args>(args)...));
}
};
Как мне использовать новое место размещения данных в функции emplace_insert
? Нужно ли мне определять собственный конструктор для структуры Element
, и если да, то как мне передать аргументы для aligned_storage_t
?
Я использую выровненное хранилище, чтобы предотвратить построение по умолчанию.
Теперь, что касается последнего вопроса, я понимаю, что этот вопрос может быть основан на мнениях, но я все еще надеюсь, что смогу получить какой-то ответ.
Было бы лучше просто сохранить второй массив, содержащий идентификатор, а не пытаться объединить их?