Безымянный класс или объект или функция, смысл кода - PullRequest
1 голос
/ 17 октября 2019

Я не могу понять значение функции

size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

Я пытался запустить простую функцию curl на c ++ для использования внутри ue4. Curl работает нормально, но я пытаюсь прочитать ответ, получить ответ в строку, как это работает своего рода JS AJAX.

Нашел решение отсюда

В Xcode C ++работает нормально

Но в ue4:

с использованием std :: string

    ((std::string*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:7: error: no member named 'string' in namespace 'std'; did you mean 'cString'?

С использованием cString:

    ((cString*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:15: error: expected expression

Попытка выяснить причину, но не знаю функцию выше, как она работает, если xcode работает нормально, то по какой причине это так. Анонимная функция, указатель и некоторые функции c ++?

Как я могу использовать этот код более человечным или более простым, и как бороться с ошибками?

Без математики, без сложений - вычитание,var или func, класс или объект, какой смысл, если этот код

((std::string*)userp)->append((char*)contents, size * nmemb);

И, поскольку я до сих пор не нашел, как получить ответ curl так же просто, как ajax, это все равно может сработать, но какэто работает и как я могу использовать это?

Любая помощь, два дня, пытаясь выяснить, пытаясь просто запустить curl, который я ранее так легко использовал в командной строке и коде php

1 Ответ

0 голосов
/ 17 октября 2019
size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

Без какого-либо дополнительного контекста, я бы предположил, что это какой-то обратный вызов, который вызывает библиотека (возможно, curl?), Чтобы позволить вам обрабатывать полученные данные. contents - это сами данные строки, size и nmemb описывают, сколько данных содержится в строке (size - ширина каждого символа, а nmemb - это количество символов, возможно?), userp - это пользовательский указатель данных, который вы, вероятно, передаете при вызове функции, которая генерирует вызовы для этого обратного вызова. Я предполагаю, что вы должны вернуть количество байтов, которые вы обработали.

В случае этой конкретной функции, я предполагаю, что вы передаете указатель std::string. Всякий раз, когда эта библиотека получает данные, она добавляет их в std::string.

((std::string*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:7: error: no member named 'string' in namespace 'std'; did you mean 'cString'?

Это вызвано отсутствием заголовка - добавьте #include <string> вверху исходного файла.

((cString*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:15: error: expected expression

Может показаться, что класс cString не имеет функции-члена с именем append. Вам нужно будет либо взглянуть на файл заголовка cString, либо обратиться к его документации, чтобы выяснить, какую функцию использовать.

...