1

SIP初心者です。C++ ファイル用の単純な python ラッパーを作成しようとしています。C++ 用のサンプル python ラッパーがあれば、助けてください。サンプルコードを入手しました。しかし、次のコマンドを実行すると、" sip: string.sip:72: This Python slot requires %MethodCode" というエラーが表示されます: mkdir sipcode cp sipcode-Makefile sipcode/Makefile $(SIP) -s ".cc" -c sipcode文字列.sip

string.sip のコードは次のとおりです。

%モジュール文字列

名前空間 std {

クラス文字列 {

%TypeHeaderCode

string.h を含める

%終わり

公開: 文字列();

string(const char*);
string(const std::string&);

bool empty();
int length();
int size();
void resize(int, char);
void resize(int);
int capacity();
void reserve(int =0);

std::string& append(const std::string&);
std::string& append(const std::string&, int, int);
std::string& append(const char*);
std::string& append(const char*, int);
std::string& append(int, char);

std::string& insert(int, const std::string&);
std::string& insert(int, const std::string&, int, int);
std::string& insert(int, const char*);
std::string& insert(int, const char*, int);
std::string& insert(int, int, char);

int find(const std::string&, int = 0);
int find(const char*, int, int);
int find(const char*, int = 0);
int find(char, int = 0);

int rfind(const std::string&, int = -1);
int rfind(const char*, int, int);
int rfind(const char*, int = -1);
int rfind(char, int = -1);

int find_first_of(const std::string&, int = 0);
int find_first_of(const char*, int, int);
int find_first_of(const char*, int = 0);
int find_first_of(char, int = 0);

int find_first_not_of(const std::string&, int = 0);
int find_first_not_of(const char*, int, int);
int find_first_not_of(const char*, int = 0);
int find_first_not_of(char, int = 0);

int find_last_of(const std::string&, int = 0);
int find_last_of(const char*, int, int);
int find_last_of(const char*, int = 0);
int find_last_of(char, int = 0);

int find_last_not_of(const std::string&, int = 0);
int find_last_not_of(const char*, int, int);
int find_last_not_of(const char*, int = 0);
int find_last_not_of(char, int = 0);

std::string substr(int = 0, int = -1);

void str (); %MemberCode const char* s; std::string* ptr;

    if (sipParseArgs(&sipArgsParsed,sipArgs,"J1",sipClass_std_string, &ptr))
    {
        s = ptr->c_str();
        /* Python API reference, P40 */
        return PyString_FromString(s);
    }

%終わり

void getitem (); %MemberCode std::string* ptr; int i;

    if (sipParseArgs(&sipArgsParsed,sipArgs,"J1i",sipClass_std_string, &ptr, &i))
    {

        if (i >= ptr->length())
        {
                /* Python API Reference, Chapter 4 */
                PyErr_SetString ( PyExc_IndexError  ,"string index out of range" );
                return NULL;
        }
        else

                return Py_BuildValue("c", ptr->at(i));
    }

%終わり

}; };

4

0 に答える 0