Ich schreibe Code für GPUs, deshalb kann ich keine STL-Klassen verwenden, weil Methoden spezielle Anmerkungen benötigen, um auf der GPU zu laufen. So, ich bin mit passenden Anmerkungen (INLINE
) auf seinen Methoden neu implementieren. Das Problem, das ich jetzt habe, ist mein Copykonstruktor den Zuweisungsoperator auf Mitglieder aufruft:std :: array-like class Kopie Konstruktor
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];
}
};
das in Ordnung für einfache T
funktioniert, aber es ist eine Art, für die dieser den Kopierkonstruktor aufrufen muss, nicht den Zuweisungsoperator . Wie bekomme ich den Compiler, um jedes Element im Array zu konstruieren?
Would [std :: uninitialized_copy_n] (http://en.cppreference.com/w/cpp/memory/uninitialized_copy_n) arbeiten? – fun4jimmy
@ fun4jimmy fast. es ist nicht für GPUs annotiert, aber ich habe seine Implementierung kopiert und das hat funktioniert. –
Eigentlich wurde Array_ bereits standardmäßig initialisiert, so dass es wahrscheinlich nicht gültig ist, uninitialized_copy_n zu verwenden. – fun4jimmy