1

次の関数をビルドすると、ビルドエラーが発生します。

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)

しかし、これは別のエラーを生成するだけです。

4

1 に答える 1

6

コンパイラに、次のタイプであることを伝えtypenameます。

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

問題はsignal_t、テンプレートパラメータに依存することです。Tそのため、型になることをコンパイラに明示的に指示する必要がありますsignal_t::slot_type

于 2013-03-22T13:23:19.100 に答える