Раньше я использовал std :: bind, и я думаю, что близок к этому использованию, но не совсем так, и я не знаю, как исправить ошибку компиляции.
Конечная цель - это средний массив указателей на небольшое количество функций с разными параметрами в каждом элементе массива. На данный момент у меня есть только одна функция и одна запись в таблице. Если я сумею понять это правильно, я думаю, что смогу решить все остальное. Я хочу использовать std :: function, чтобы я мог помещать различные параметры в массив.
Вот объявление пока только одной функции:
static Get *MakeGArrayStatic(void *Subscript, const void **array, unsigned int sizeOfArray);
Вот объявление единственного указателя, типичного для массива:
typedef std::tr1::function<Get *(void *, const void**, unsigned int)> GetMaker;
static GetMaker *gm1;
Вот определение указателя:
Get::GetMaker *Get::gm1 = std::tr1::bind(&MakeGArrayStatic, &OutMsg::CurrentSeverity, FacSevTbls::SyslogSeveritiesForMessages, FacSevTbls::NumberOfTrueSeverities);
(Get - это класс, CurrentSeverity - это перечисление, SyslogSeveritiesForMessages - это const char **, а NumberOfTrueSeverities - это size_t.)
Ошибка, которую я получаю (VS 2010),
ошибка C2440: 'инициализация': невозможно преобразовать из 'std :: tr1 :: _ Bind ‹_Result_type, _Ret, _BindN>' в 'Get :: GetMaker *' с [_Result_type = Get *, _Ret = Get *, _BindN = std: : tr1 :: _ Bind3, SyslogEnums :: SeverityEnum *, const char **, size_t>] Нет доступного определяемого пользователем оператора преобразования, который мог бы выполнить это преобразование, или оператор не может быть вызван
Кто-нибудь может указать, где я ошибаюсь?
std::bind
? - person πάντα ῥεῖ   schedule 23.09.2018gm1
указатель? - person kmdreko   schedule 23.09.2018std::bind()
не возвращает указатель, не так ли? Он возвращает вызываемый объект по значению (которое вы можете присвоить своемуstd::function()
). - person PlinyTheElder   schedule 23.09.2018GetMaker func = std::bind( ...your params here... )
. И тогда вам нужно правильно настроить параметры. - person PlinyTheElder   schedule 23.09.2018