Problème de retour covariant
Bonjour a tous,
voilà, dans mon programme, j'utilise différentes classes templates et j'aimerai effectuer un retour de type covariant sur elle. Seulement, mon compilateur (gcc4.1) me renvoit ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
tinyConnection.h:73: error: invalid covariant return type for
'virtual libterp::tinyXmlRpcCall<std::vector<libterp::dict, std::allocator<libterp::dict> >&>
libterp::tinyXmlRpcConnection::read(const std::string&, const std::vector<int, std::allocator<int> >&,
const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const libterp::dict&)'
tinyConnection.h:50: error: overriding
'virtual libterp::tinyCall<std::vector<libterp::dict, std::allocator<libterp::dict> >&>
libterp::tinyConnection::read(const std::string&, const std::vector<int, std::allocator<int> >&
, const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const libterp::dict&)' |
Mon code source est le suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| //Mes classes templates qui servent de retour
template <class T>
class tinyCall
{
public:
virtual ~tinyCall(){};
virtual T getResult();
};
template <class T>
class tinyXmlRpcCall : public tinyCall<T>
{
public:
tinyXmlRpcCall(xmlrpc_c::rpcPtr call, xmlrpc_c::connection& connection);
T getResult();
};
/Ma classe de base, renvoie le type de base
class tinyConnection
{
public:
virtual tinyCall<vector<dict>&> read(const string& object, const vector<int>& ids,
const vector<string>& fields, const dict& context) = 0;
...
}
//Ma classe déricée, renvoie le type dérivé
class tinyXmlRpcConnection : public tinyConnection
{
public:
tinyXmlRpcCall<vector<dict>&> read(const string& object, const vector<int>& ids,
const vector<string>& fields, const dict& context);
...
} |