【问题标题】:Passing template into boost function将模板传递给 boost 函数
【发布时间】:2010-06-14 21:02:19
【问题描述】:
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

【问题讨论】:

    标签: c++ function boost templates


    【解决方案1】:

    boost::function 需要一个类型,所以你不能传递一个模板的名字,它必须是一个模板instance。所以要么使用特定的实例

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

    或将整个事物本身放入模板中:

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

    【讨论】:

    • 你能提供一些样品吗?
    • 是的,我需要第二个代码示例(关于结构)。谢谢。
    【解决方案2】:

    类模板只是类的模板,它还不是真正的类。您需要指定模板参数才能从中获取一个类,例如IEvent&lt;int&gt;。所以你需要决定你希望 typedef 是什么类型的事件,例如 int:

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

    否则,如果您想要所有可能的模板实例化的 typedef,则需要将 typedef 本身放入另一个模板化类中。有关示例,请参见 sbi 的答案。

    【讨论】:

    • 实际上它被称为“类模板”(不是“模板类”)——正如你所写的那样,因为它确实是一个模板,而不是一个.
    猜你喜欢
    • 2017-12-25
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多