Voglio creare una struttura con 3 valori: una stringa e due int. La stringa è obbligatoria, ma uno (o entrambi) degli interi è facoltativo e può essere impostato su -1 se non specificato.posizionare oggetti derivanti da tuple in un vettore in C++
Tuttavia, piuttosto che utilizzare una struttura, ho pensato di provare una std :: tupla. Al fine di integrare l'opzione-ness dei due interi, a configurare una classe di "Trio" che eredita da std :: tuple, come di seguito:
#include <string>
#include <tuple>
class Trio : public std::tuple<std::string, int, int>
{
public:
explicit Trio(std::string const & name, int val1 = -1, int val2 = -1)
:
tuple(name, val1, val2)
{
}
};
Poi vado a testare la classe Trio spingendo alcuni oggetti Trio in uno std :: vector:
#include <vector>
int main(void)
{
std::vector<Trio> trios;
Trio trio("trio1", 1, 1);
trios.push_back(trio);
return 0;
}
mi dà il seguente errore in Visual Studio 2010:
>c:\program files (x86)\microsoft visual studio 10.0\vc\include\tuple(127):
error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const
std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1
from 'const Trio' to 'const std::basic_string<_Elem,_Traits,_Ax> &'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Reason: cannot convert from 'const Trio' to 'const
std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
qualcuno capire quello che sto facendo in modo errato qui? C'è qualcosa di ovvio che non sto vedendo? Sto forse abusando gravemente dell'uso di std :: tuple?
Grazie,
Aaron
Compila OK su ideone: http://ideone.com/9q0nxW – Bill
Questo compilato per me con g ++ http://ideone.com/ZAIDUp – juanchopanza