get_new_data_sink_function_type
не тип функции, а тип указателя на функцию.boost::function
требуется тип функции (или подпись).
Кроме того, абстрактный класс не обязательно должен быть неполным типом (и он не находится на сайте вашего typedef
).Часть предупреждения «неполный тип», вероятно, проистекает из того факта, что boost::function
возможно записывается так:
template<typename Sig>
class function; // Not defined!
template<typename Ret, typename Arg>
class function<Ret(Arg)> {
// ...
};
// Various other specializations
, что означает, что когда boost::function
создается с нефункциональным типом, какв вашем случае специализация не совпадает и базовый шаблон выбран.Так как он не определен, это неполный тип.
Самое простое исправление, которое вы можете сделать, - это сделать ваш typedef
реальным типом функции, что сделает его имя больше не вводящим в заблуждение:
typedef std::auto_ptr<DataSink> get_new_data_sink_function_type(std::string);
Обратите внимание, что при этом get_new_data_sink_function_type*
будет таким же указателем на тип функции, как и раньше.