libcurl for C++ programmers

for C++ programmers

libcurl은 C API를 제공합니다. C와 C++는 비슷하지만 같지는 않습니다. C++에서 libcurl을 사용할 때 염두에 두어야 할 몇 가지 사항이 있습니다.

문자열은 C++ 문자열 객체가 아니라 C 문자열입니다.

char *를 허용하는 libcurl의 API에 문자열을 전달할 때 C++ 문자열이나 객체를 해당 함수에 전달할 수 없음을 의미합니다.

예를 들어, C++로 문자열을 작성한 다음 해당 문자열을 URL로 사용하려는 경우:

1
2
std::string url = "https://example.com/foo.asp?name=" + i;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

콜백 고려 사항

libcurl은 C 라이브러리이기 때문에 C++ 멤버 함수나 객체에 대해 아무것도 모릅니다. 클래스에 대한 포인터가 전달되는 정적 멤버 함수를 사용하면 이 “제한”을 비교적 쉽게 극복할 수 있습니다.

다음은 C++ 메서드를 콜백으로 사용하는 쓰기 콜백의 예입니다.

1
2
3
4
5
6
7
8
9
10
// f is the pointer to your object.
static size_t YourClass::func(void *buffer, size_t sz, size_t n, void *f)
{
// Call non-static member function.
static_cast<YourClass*>(f)->nonStaticFunction();
}

// This is how you pass pointer to the static function:
curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass::func);
curl_easy_setopt(hcurl, CURLOPT_WRITEDATA, this);
공유하기