2011-11-28 7 views
5

Sto usando Boost Python per racchiudere alcune funzioni C++ che ho creato. Una delle mie funzioni C++ contiene 22 argomenti. Boost si lamenta quando provo a compilare la mia soluzione con questa funzione, e sto cercando di capire se è solo perché questa funzione ha troppi argomenti.Boost Python - Limita il numero di argomenti durante il wrapping di una funzione

Qualcuno sa se esiste un limite di questo tipo? Ho copiato l'errore che sto ricevendo qui sotto, non il codice perché immagino che qualcuno conosca o meno la risposta a questo, e se non c'è limite, cercherò di capirlo da solo. Grazie mille in anticipo!

Ecco una copia del l'inizio del messaggio di errore che ricevo ...

1>main.cpp 

1>c:\cpp_ext\boost\boost_1_47\boost\python\make_function.hpp(76): error C2780: 'boost::mpl::vector17<RT,most_derived<Target,ClassT>::type&,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14> boost::python::detail::get_signature(RT (__thiscall ClassT::*)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14) volatile const,Target *)' : expects 2 arguments - 1 provided 

1>c:\cpp_ext\boost\boost_1_47\boost\python\signature.hpp(236) : see declaration of 'boost::python::detail::get_signature' 

E alla fine ottengo un centinaio di copie di messaggi di errore molto simili a questo:

1>c:\cpp_ext\boost\boost_1_47\boost\python\make_function.hpp(76): error C2784: 'boost::mpl::vector17<RT,ClassT&,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14> boost::python::detail::get_signature(RT (__thiscall ClassT::*)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14) volatile const)' : could not deduce template argument for 'RT (__thiscall ClassT::*)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14) volatile const' from 'std::string (__cdecl *)(const std::string &,jal::date::JULIAN_DATE,const std::string &,const std::string &,int,const std::string &,const std::string &,const std::string &,const std::string &,const std::string &,const std::string &,int,const std::string &,const std::string &,int,const std::string &,const std::string &,const std::string &,const std::string &,const std::string &,int,const std::string &)' 
1>   c:\cpp_ext\boost\boost_1_47\boost\python\signature.hpp(218) : see declaration of 'boost::python::detail::get_signature' 
1>c:\cpp_ext\boost\boost_1_47\boost\python\make_function.hpp(76): error C2780: 'boost::mpl::vector17<RT,most_derived<Target,ClassT>::type&,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14> boost::python::detail::get_signature(RT (__thiscall ClassT::*)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14) volatile,Target *)' : expects 2 arguments - 1 provided 
1>   c:\cpp_ext\boost\boost_1_47\boost\python\signature.hpp(236) : see declaration of 'boost::python::detail::get_signature' 

risposta

4

Sì, c'è un limite. You can find those limits here. Sembra che sia 15, anche se credo che tu possa cambiarlo, secondo il link.

+0

Grande, grazie per il collegamento! Mi chiedo perché imporranno un limite arbitrario come quello se cambiando semplicemente il limite il programma funzioni ancora ... Non ho trovato la parte di quel collegamento che diceva che è possibile cambiare quel valore, puoi indicarmi per favore? – Derek

+2

@Derek Senza modelli variadic (nel nuovo standard) dovresti scrivere a mano ogni versione, quindi dovresti fermarti da qualche parte. Per quanto riguarda la possibilità di modificare tali numeri _utilizzando valori diversi di queste macro quando si compila diverse librerie (inclusi i moduli di estensione e la libreria Boost.Python stessa) si tratta di una violazione dell'ODR. Tuttavia, non conosciamo implementazioni C++ su cui questa particolare violazione è rilevabile o causa problemi. Perché inventarlo se non lo si può effettivamente fare? – stonemetal

Problemi correlati