расширение PHP, как вернуть строку из метода? - PullRequest
1 голос
/ 13 сентября 2011

У меня есть в [example.cc] метод:

std::string Car::accelerate (std::string n)
{
cout<<n<<endl;
return n;
}

Я хотел бы вызвать этот метод из расширения php

Я написал это в своем расширении [test_php.cc]:

 char *strr=NULL;
 int strr_len;
 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strr, &strr_len) == FAILURE) {
        RETURN_NULL();
  }
  std::string s(strr);
RETURN_STRING(car->accelerate(s),1);

У меня следующая ошибка:

warning: deprecated conversion from string constant to ‘char*’
/home/me.cc:79: error: cannot convert ‘std::string’ to ‘const char*’ in initialization
/home/me.cc: At global scope:warning: deprecated conversion from string constant to ‘char*’

Если я изменю return_string (..) _ простым вызовом car->accelerate(s); это работает .. это правда, что ничего не печатается как функция возврата. нужна помощь. оценить

1 Ответ

2 голосов
/ 13 сентября 2011

Учитывая ваш недавний комментарий, я предложу это как (необразованный) ответ.

RETURN_STRING () принимает const char* в своем первом параметре. Это то, что вы называете «C-String», и нет автоматического преобразования из std::string в const char * (по крайней мере для компилятора).

То, что вы хотите сделать, это передать const char* в качестве первого аргумента. Чтобы сгенерировать const char* из std :: string, вы вызываете метод c_str(). То есть измените свою последнюю строку на:

RETURN_STRING(car->accelerate(s) . c_str(), 1);
...