2011-11-28 5 views
5

Estoy usando Boost Python para ajustar algunas funciones de C++ que he creado. Una de mis funciones de C++ contiene 22 argumentos. Boost se queja cuando trato de compilar mi solución con esta función, y estoy tratando de averiguar si es solo porque esta función tiene demasiados argumentos.Boost Python: límites en el número de argumentos al ajustar una función

¿Alguien sabe si existe tal límite? He copiado el error que estoy obteniendo a continuación, no el código porque creo que alguien sabe la respuesta a esto o no, y si no hay límite, intentaré resolverlo por mi cuenta. Muchas gracias de antemano!

Aquí está una copia del principio del mensaje de error que recibo ...

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' 

Y finalmente Tengo alrededor de un centenar de copias de los mensajes de error que se asemejan mucho esta:

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' 

Respuesta

4

Sí, hay un límite. You can find those limits here. Parece ser 15, aunque creo que puede cambiarlo, según el enlace.

+0

Genial, gracias por el enlace. Me pregunto por qué impondrían un límite arbitrario como ese si simplemente cambiando el límite sigue funcionando el programa ... No encontré la parte de ese enlace que dijera que es posible cambiar ese valor, ¿me pueden indicar algo? por favor? – Derek

+2

@Derek Sin las plantillas variadic (en el nuevo estándar) tendría que escribir a mano cada versión, por lo que tendría que detenerse en alguna parte. En cuanto a la capacidad de cambiar esos números, el uso de diferentes valores de estas macros al compilar diferentes bibliotecas (incluidos los módulos de extensión y la propia biblioteca Boost.Python) es una violación de la ODR. Sin embargo, no conocemos implementaciones de C++ en las que esta violación en particular sea detectable o cause problemas. ¿Por qué aparece si no puede hacerlo? – stonemetal

Cuestiones relacionadas