Я пишу код для графических процессоров, поэтому я не могу использовать классы STL, потому что методам нужны специальные аннотации для работы на графическом процессоре. Итак, я переоцениваю std::array
, с соответствующими аннотациями (INLINE
) по его методам. Проблема у меня сейчас мой экземпляр конструктор вызывает оператор присваивания на членах:std :: array-like class copy constructor
template <typename T, Int n>
class Few {
T array_[n];
public:
INLINE Few(Few<T, n> const& rhs) {
for (Int i = 0; i < n; ++i) array_[i] = rhs.array_[i];
}
};
Это работает хорошо для простых T
, но есть тип, для которого это необходимо вызвать конструктор копирования, а не оператор присваивания , Как заставить компилятор скопировать конструкцию каждого элемента в массив?
Would [станд :: uninitialized_copy_n] (http://en.cppreference.com/w/cpp/memory/uninitialized_copy_n) работать? – fun4jimmy
@ fun4jimmy почти. его не аннотировали для графических процессоров, но я скопировал его реализацию, и это сработало. –
На самом деле array_ уже был инициализирован по умолчанию, поэтому, вероятно, он недействителен для использования uninitialized_copy_n. – fun4jimmy