#include <iostream>
#include <string>
#include <array>
class C {
private:
std::string a;
std::string b;
std::string c;
public:
C(std::string a_, std::string b_, std::string c_) : a{a_},b{b_},c{c_} {}
~C(){};
C(const C&) =delete;
C(const C&&) =delete;
const C& operator=(const C&) =delete;
const C& operator=(const C&&) =delete;
};
std::array<C,2> array = {C("","",""),C("","","")};
int main()
{}
to nie skompiluje (Android Studio z NDK i clang) z błędem "call to deleted constructor of c". Wiem, że mogę np. użyj std::vector
i emplace_back()
, aby skonstruować element bezpośrednio w kontenerze, ale w moim kodzie chcę użyć tylko kontenerów o stałej wielkości i obiektów niekopiowalnych/ruchomych do optymalizacji. Prawdopodobnie brakuje mi tutaj czegoś podstawowego, ale czy nie istnieje sposób na zainicjowanie modelu std::array
bez uprzedniego skonstruowania poszczególnych elementów, a następnie skopiowania ich tam?initialize std :: array bez kopiowania/przenoszenia elementów
Nawiasem mówiąc nie trzeba umieścić te podkreślenia w swoich nazwach parametrów. 'C (std :: string a, std :: string b, std :: string c): a {a}, b {b}, c {c} {}' nie ma problemów z niejednoznacznością i robi to, czego się spodziewasz. – nwp