2011-11-28 26 views
5

Tôi đang sử dụng Boost Python để bọc một số hàm C++ mà tôi đã tạo. Một trong các hàm C++ của tôi chứa 22 đối số. Boost phàn nàn khi tôi cố gắng biên dịch giải pháp của tôi với hàm này, và tôi đang cố gắng tìm hiểu xem nó có phải chỉ vì hàm này có quá nhiều đối số.Tăng Python - Giới hạn số đối số khi gói một hàm

Có ai biết nếu có giới hạn như vậy không? Tôi đã sao chép lỗi tôi nhận được dưới đây, không phải mã vì tôi biết ai đó biết câu trả lời cho điều này hay không - và nếu không có giới hạn thì tôi sẽ cố gắng tìm ra nó. Cảm ơn rất nhiều trước!

Đây là một bản sao của sự khởi đầu của thông báo lỗi tôi nhận được ...

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' 

Và cuối cùng tôi nhận được khoảng một trăm bản sao các thông báo lỗi rất nhiều giống cái này:

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' 

Trả lời

4

Có giới hạn. You can find those limits here. Nó có vẻ là 15, mặc dù tôi tin rằng bạn có thể thay đổi nó, theo liên kết.

+0

Tuyệt vời, cảm ơn bạn đã liên kết! Tôi tự hỏi tại sao họ sẽ áp đặt một giới hạn tùy ý như vậy nếu chỉ đơn giản là thay đổi giới hạn mà chương trình vẫn hoạt động ... Tôi không tìm thấy một phần của liên kết đó nói rằng có thể thay đổi giá trị đó, bạn có thể chỉ cho tôi xin vui lòng? – Derek

+2

@Derek Nếu không có mẫu variadic (trong tiêu chuẩn mới), bạn sẽ phải viết tay mỗi phiên bản, vì vậy bạn sẽ phải dừng lại ở đâu đó. Theo khả năng thay đổi những con số đó, hãy sử dụng các giá trị khác nhau của các macro này khi biên dịch các thư viện khác nhau (bao gồm cả các mô-đun mở rộng và thư viện Boost.Python) là vi phạm ODR. Tuy nhiên, chúng tôi biết không có triển khai C++ nào mà vi phạm cụ thể này có thể phát hiện được hoặc gây ra bất kỳ sự cố nào._ Tại sao lại đưa nó lên nếu bạn không thực sự làm được? – stonemetal

Các vấn đề liên quan