Vorrei esporre il codice C++ con unperché ho bisogno di operatori di confronto nella suite di indicizzazione vettoriale boost python?
std::vector<A>
al pitone. My
class A{};
non ha un operatore di confronto implementato. Quando provo
BOOST_PYTHON_MODULE(libmyvec)
{
using namespace boost::python;
class_<A>("A");
class_<std::vector<A> >("Avec")
.def(boost::python::vector_indexing_suite<std::vector<A> >());
}
Viene visualizzato un errore sugli operatori di confronto. Se cambio la definizione di A a
class A {
public:
bool operator==(const A& other) {return false;}
bool operator!=(const A& other) {return true;}
};
Funziona come un fascino.
Perché è necessario implementare questi operatori di confronto? C'è un modo per utilizzare il vector_indexing_suite
senza di loro?
Grazie per la risposta! Questo codice è disponibile solo nella sandbox boost? Qual è il modo più semplice per usarlo? Devo scaricare e compilare manualmente boost dopo aver scambiato i file nella [sandbox] (https://svn.boost.org/svn/boost/sandbox/python_indexing_v2/)? – Hans
Apparentemente, questa funzione non è ancora inclusa nella versione di Boost.Python, quindi se vuoi usarla, devi scaricare l'ultima versione dalla sandbox e ricostruirla. Tuttavia, non so quale sia lo stato di questa versione (non è ancora stata esaminata), quindi la soluzione migliore è probabilmente quella di attuare l'implementazione fittizia degli operatori di confronto. –