chciałbym narazić kodu C++ zDlaczego potrzebuję operatorów porównania w pakiecie wektorów doładowania Pythona?
std::vector<A>
do pytona. Moje
class A{};
nie ma wdrożonego operatora porównania. Gdy próbuję uzyskać
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> >());
}
pojawia się błąd dotyczący operatorów porównania. Jeśli zmienię definicję A na
class A {
public:
bool operator==(const A& other) {return false;}
bool operator!=(const A& other) {return true;}
};
Działa jak urok.
Dlaczego muszę wdrożyć operatorów porównania? Czy istnieje sposób bez nich używać vector_indexing_suite
?
Dzięki za odpowiedź! Czy ten kod jest dostępny tylko w obszarze zwiększającym wydajność? Jak najprościej z niego skorzystać? Czy muszę ręcznie pobierać i kompilować doładowania po wymianie plików w [piaskownicy] (https://svn.boost.org/svn/boost/sandbox/python_indexing_v2/)? – Hans
Wygląda na to, że ta funkcja nie jest jeszcze dostępna w wersji Release Boost.Python, więc jeśli chcesz z niej korzystać, musisz pobrać najnowszą wersję ze środowiska sandbox i odbudować ją. Nie wiem jednak, jaki jest status tej wersji (nie jest jeszcze sprawdzany), więc najlepiej jest pozostać przy fikcyjnej implementacji operatorów porównania. –