Как я называю C++ статической библиотекой от Perl?

Вот рабочий пример.

import pandas as pd
import random

a = random.sample([0,1]*5, 10)
b = random.sample([0,1]*5, 10)
ab = random.sample([0,1]*5, 10)
bc = random.sample([0,1]*5, 10)

df = pd.DataFrame({'A':a,'B':b, 'AB':ab,'BC':bc})
df

    A   B   AB  BC
0   0   1   1   0
1   1   0   0   1
2   0   1   0   0
3   1   0   1   1
4   0   1   1   0
5   0   0   1   1
6   1   1   0   0
7   1   0   0   0
8   0   0   0   1
9   1   1   1   1

df[(df['A']==df['AB']) & (df['B']==df['BC'])]

Выходные данные представляют собой новый фрейм данных с наблюдениями, которые соответствуют установленным критериям.

11
задан Bill the Lizard 9 January 2009 в 14:07
поделиться

6 ответов

Вы хотите посмотреть на использование XS, который является, как Perl обычно взаимодействует через интерфейс с библиотеками C/C++. Это не совсем тривиально. Несколько соответствующих частей документации Perl:

5
ответ дан 3 December 2019 в 05:59
поделиться

Можно назвать код из других библиотек через Встроенный:: C (и вероятно то же через Встроенный:: CPP) - взглянули на Встроенный:: C:: Поваренная книга. Скорее всего, Вы хотите начать со Встроенным и после того, как Вы будете сделаны, экспериментируя использование получающийся.XS файл для работы далее.

8
ответ дан 3 December 2019 в 05:59
поделиться

Необходимо создать функцию обертки, которая является вызываемой от жемчуга и AFAIK, у Вас должна будет быть эта функция обертки быть в динамической библиотеке (если Вы не соберетесь восстановить двоичный файл жемчуга и связать статический lib с ним). Мне нравится использовать инструмент под названием БОЛЬШОЙ ГЛОТОК (Простой Генератор Интерфейса Обертки) для создания оберток для меня. Это может создать обертки приблизительно для 17 других языков также.

2
ответ дан 3 December 2019 в 05:59
поделиться

Во-первых, это действительно должно быть в динамической библиотеке, не статической библиотеке (если Вы не перекомпилируете сам жемчуг и свяжете его против Вашей статической библиотеки).

Во-вторых, так как C++ исказит имена (одна из самых раздражающих "Функций" C++, если Вы спросите меня), то Вам будет нужен экстерн "C" блок, который содержит функции рычага. При использовании C++, Вы могли бы, вероятно, обойтись единственной функцией рычага, которая возвращает объект C++, который реализует интерфейс, который необходимо использовать. Так как Вы используете жемчуг, Вы, возможно, должны перенести объект в интерфейс как это:

CPPObject object;

extern "C"
{

int InitObject( void )
{
  return object.init();
}

int DoCoolStuff( void )
{
  return object.DoCoolStuff();
}

int DoOtherCoolStuff( int foo )
{
  return object.DoOtherCoolStuff( foo );
}

int DestroyObject( void )
{
  return object.Destroy();
}

}
4
ответ дан 3 December 2019 в 05:59
поделиться

Вероятно, не, что Вы думаете, но как насчет того, чтобы писать автономной программе C++, с которой программа жемчуга связывается через каналы?

1
ответ дан 3 December 2019 в 05:59
поделиться

Я только начинаю переносить голову вокруг XS, таким образом, я не могу предложить много справки. Но вот то, что я действительно знаю...

Существует XSpp, который является XS для C++. Это распределяется с WxPerl. WxPerl находится в процессе активного и быстро реагирующего развития.

Inline:CPP может использоваться для написания первоначального кода интерфейса/обертки. Затем можно проанализировать сгенерированный XS. Однако это не выглядит так хорошо maintianed. Если это работает, это может предоставить Вам хорошее преимущество.

Вы могли бы найти это короткое примечание по XS и C++ John Keiser полезным, если немного датированный.

0
ответ дан 3 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: