Я написал часть класса на C++, и я хочу использовать его совместно с графическим интерфейсом Python, поэтому я использую Boost.Python, чтобы попробовать и сделать это легко. Проблема я бегу в том, что в следующем их руководство (http://www.boost.org/doc/libs/1_55_0/libs/python/doc/tutorial/doc/html/python/exposing.html), я получаю следующее исключение всякий раз, когда я бегу bjam:Boost.Python 'слишком мало аргументов шаблона для class_'
PacketWarrior/pcap_ext.cc:21:5: error: too few template arguments for class template 'class_'
Очевидно, что жалуется на меня, опуская то, что они утверждают, являются необязательными аргументами к функции шаблона 'class_', но я не могу понять, почему. Я предполагаю, что это проблема с компилятором, но я не знаю, как это исправить. Я запускаю OS X 10.9 и использую darwin для набора инструментов по умолчанию, но GCC выдает ту же ошибку. Моя Boost версия 1_55_0, если это вообще помогает.
заголовка файла класса (охранники заголовка опущены):
#include <queue>
#include "pcap.h"
#include "Packet.h"
class PacketEngine {
public:
PacketEngine();
~PacketEngine();
const char** getAvailableDevices(char *error_buf);
bool selectDevice(const char* dev);
Packet getNextPacket();
private:
char *selected_device;
char **devices;
int num_devices;
std::queue<Packet> packet_queue;
};
сс файл, содержащий ссылки на Boost.Python и мой класс:
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include "PacketEngine.h"
BOOST_PYTHON_MODULE(pcap_ext) {
using namespace boost::python;
class_<PacketEngine>("PacketEngine")
.def("getAvailableDevices", &PacketEngine::getAvailableDevices);
}
И мой файл bjam (нерелевантные части и комментарии опущены):
use-project boost : ../../../Downloads/boost_1_55_0 ;
project
: requirements <library>/boost/python//boost_python
<implicit-dependency>/boost//headers
: usage-requirements <implicit-dependency>/boost//headers
;
python-extension pcap_ext : PacketWarrior/pcap_ext.cc ;
install convenient_copy
: pcap_ext
: <install-dependencies>on <install-type>SHARED_LIB <install-type>PYTHON_EXTENSION
<location>.
;
local rule run-test (test-name : sources +)
{
import testing ;
testing.make-test run-pyd : $(sources) : : $(test-name) ;
}
run-test pcap : pcap_ext pcap.py ;
Любые идеи относительно того, как обойти это исключение, отличные я оценил! Я рассмотрел очевидный маршрут добавления дополнительных параметров, но я не думаю, что они имеют отношение к моему проекту. Определение class_ можно найти здесь:
http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/class.html
Если вы отметите свой вопрос с [тегом: буст-питон], вы максимизировать ваш шансы привлечь к работе некоторых экспертов по библиотеке. Я очень мало знаю об этом, но быстрый поиск в Google привел меня к [этому] (http://lists.boost.org/boost-users/2008/07/37787.php), и это кажется многообещающим. – llonesmiz
сделаю, спасибо за отзыв – drodman