Передача шаблона в функцию повышения - PullRequest
3 голосов
/ 15 июня 2010
template <class EventType>
class IEvent;

class IEventable;

typedef boost::function<void (IEventable&, IEvent&)> behaviorRef;

Как правильно передать шаблонный класс IEvent в функцию boost? С этим кодом я получаю: error: functional cast expression list treated as compound expression error: template argument 1 is invalid error: invalid type in declaration before ‘;’ token

Ответы [ 2 ]

5 голосов
/ 15 июня 2010

boost::function требуется тип , поэтому вы не можете передать ему имя template , это должен быть шаблон instance . Так что либо используйте конкретный экземпляр

typedef boost::function<void (IEventable&, IEvent<SomeEventType>&)> behaviorRef;

или поместите все это в шаблон:

template< typename EventType >
struct foo {
  typedef boost::function<void (IEventable&, IEvent<EventType >&)> behaviorRef;
};
0 голосов
/ 15 июня 2010

Шаблон класса - это просто шаблон для класса, это еще не настоящий класс. Вам нужно указать параметры шаблона, чтобы получить из него класс, например IEvent<int>. Поэтому вам нужно решить, для каких событий вы хотите использовать этот typedef, например, для int:

typedef boost::function<void (IEventable&, IEvent<int>&)> behaviorRef;

В противном случае, если вам нужен typedef для всех возможных реализаций шаблона, вам нужно поместить сам typedef в другой шаблонный класс. Посмотрите ответ sbi для примера этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...