Как создать нулевой Functor в C++ (используя библиотеку loki)

Писать что-то вроде этого, используя библиотеку loki,

typedef Functor<void> BitButtonPushHandler;

выдает ошибку компилятора, но это работает

typedef Functor<void,TYPELIST_1(Matrix3D*)> Perspective;

Functor.h:530: ошибка: '((Loki::FunctorHandler, int>*)this)->Loki::FunctorHandler, int>::f_' нельзя использовать в качестве функции Functor.h:530: error: return-значение со значением, в функции, возвращающей 'void'

Кто-нибудь, знакомый с этой библиотекой, знает, как заставить работать первую строку?

2 ответа

Решение

Глядя на исходный код, определение шаблона Functor выглядит следующим образом:

template <typename R = void, class TList = NullType,
        template<class, class> class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL>
    class Functor{...};

Как указано ниже, недопустимы определения типов шаблонов, поэтому необходимо указывать все типы (или принимать все значения по умолчанию).

Вы можете просто определить следующее и позволить настройкам по умолчанию сделать работу:

typedef Functor<> BitButtonPushHandler;

Это скомпилировано для меня с небольшим тестовым классом Functor (а не с классом Loki), и я могу успешно использовать typedef.

То, что я изначально написал, сработало... было уже поздно, и я забыл о...

using namespace Loki; 

...так жаль

Другие вопросы по тегам