2010-06-14 3 views
3
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Передача шаблона в функцию ускорения

ответ

5

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

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

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

template< typename EventType > 
struct foo { 
    typedef boost::function<void (IEventable&, IEvent<EventType >&)> behaviorRef; 
}; 
+0

Не могли бы вы предоставить образец? – Ockonal

+0

@ Ockonal: Я пытался. Это помогает? – sbi

+0

Да, второй пример кода (о структуре) - это то, что мне нужно. Спасибо. – Ockonal

0

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

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

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

+0

На самом деле это называется «шаблон класса» (не «шаблонный класс») - и это, как вы писали, потому что это действительно _template_, а не _class_. – sbi

+0

@sbi: изменилось, что – sth

Смежные вопросы