#include <memory>
#include <iostream>
#include <exception>
#include <curl/curl.h>
class client
{
private:
std::unique_ptr<CURL, decltype(&psclient::del_curl)> uptr_curl_;
inline CURL * init_curl()
{
CURLcode result = curl_global_init(CURL_GLOBAL_DEFAULT);
if(result != CURLE_OK)
throw std::logic_error(curl_easy_strerror(result));
return curl_easy_init();
}
inline void del_curl(CURL * ptr_curl)
{
curl_easy_cleanup(ptr_curl);
curl_global_cleanup();
}
public:
inline client()
: uptr_curl_(init_curl(), &client::del_curl)
{
}
}
Компилятор продолжает жаловаться No matching constructor for initialization of 'std::unique_ptr<CURL, void (*)(CURL *)>'
Как передать нестатические функции члена как unique_ptr Deleter
Мне кажется, как декларация является правильной для шаблона Deleter аргумента. Это указатель на функцию, который возвращает void и принимает CURL * в качестве аргумента. Это соответствует сигнатуре del_curl
.
Есть ли еще одно случайное правило, неизвестное мне, в C++, которое указывает требование для аргументов шаблона к нестационарным указателям на функцию-член? Если да, то почему?
Изменение 'недействительным del_curl (CURL * ptr_curl)' от нестатической функции члена к статической функции-члена. –
ПОЧЕМУ ПОЧЕМУ ПОЧЕМУ :) –
@FranciscoAguilera, потому что вы пытаетесь привязать указатель-к-функции к функции-указателю-члену, и это не работает: 'uptr_curl_ (init_curl(), & client :: del_curl) ' – vsoftco