2011-11-28 16 views
5

Oluşturduğum bazı C++ işlevlerini kaydırmak için Boost Python kullanıyorum. C++ işlevlerimden biri 22 bağımsız değişken içeriyor. Çözümü bu işlevle derlemeye çalıştığımda, daha fazla destek alıyorum ve sadece bu işlevin çok fazla argümanı olup olmadığını anlamaya çalışıyorum.Boost Python - Bir işlev sararken argüman sayısını sınırlar

Böyle bir sınır olup olmadığını bilen var mı? Aşağıdan aldığım hatayı kopyaladım, kodu değil, çünkü birisinin bunun cevabını bildiğini ya da bilmediğini - ve eğer bir sınır yoksa o zaman kendimi anlamaya çalışacağım. Şimdiden çok teşekkürler! İşte

...

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' 

aldığım hata mesajı başında bir kopyasıdır Ve sonunda ben çok benzeyen hata mesajlarının yüz nüsha bu bir hakkında olsun:

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' 

cevap

4

Evet bir sınır var. You can find those limits here. Bağlantıya göre değişebileceğine inanıyorum, 15 gibi görünüyor.

+0

Harika, bağlantı için teşekkürler! Niçin böyle bir limit uygulayacaklarını merak ettim ki, eğer limitini değiştirerek program hala çalışıyorsa ... O linkin bir kısmını bu değeri değiştirmenin mümkün olduğunu söyleyemedim. lütfen? – Derek

+2

@ Derek Değişken şablonlar olmadan (yeni standartta) her bir sürümü elle yazmak zorunda kalacaksınız, bu yüzden bir yerde durmak zorunda kalacaksınız. Farklı sayıdaki kütüphaneleri (uzatma modülleri ve Boost.Python kütüphanesinin kendisi dahil) derlerken bu makroların farklı değerlerini değiştirerek bu sayıları değiştirebilme yeteneği, ODR'nin ihlalidir. Bununla birlikte, bu özel ihlalin tespit edilebileceği veya herhangi bir soruna neden olduğu C++ uygulamalarının olmadığını biliyoruz. Bunu gerçekten yapamıyorsanız niçin getirin? – stonemetal

İlgili konular