【问题标题】:boost::signal slot_type with a template带有模板的 boost::signal slot_type
【发布时间】:2013-03-22 13:21:17
【问题描述】:

在构建以下函数时遇到构建错误:

template <class T> class Event {
public:
    typedef boost::signal<void (void*, const T)>    signal_t;
    typedef boost::signals::connection              connection_t;   

public:
    Event() { }

    connection_t connect(signal_t::slot_type subscriber){
        return signal.connect(subscriber);
    }
}

错误:

error: 'class boost::signal<void ()(void*, T), boost::last_value<typename boost::function_traits<void ()(void*, T)>::result_type>, int, std::less<int>, boost::function<void ()(void*, T)> >::slot_type' is not a type

我相信这与它是模板化的事实有关,但我不确定如何解决它。我试过添加,这样

connection_t connect(signal_t::slot_type<T> subscriber)

但这只会产生另一个错误。

【问题讨论】:

  • 在某处粘贴“typename”关键字 - 通常会有所帮助;)

标签: c++ boost boost-signals


【解决方案1】:

typename 告诉编译器它是一个类型:

connection_t connect(typename signal_t::slot_type subscriber){
    return signal.connect(subscriber);
}

问题在于signal_t 依赖于模板参数T,因此您需要明确告诉编译器signal_t::slot_type 将是一个类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多