4

C++ アクター フレームワーク (CAF)で厳密に型指定されたアクターを宣言しようとしていますが、何らかの理由でコードがコンパイルされません。何が悪いのか教えていただけますか?

#include "caf/all.hpp"

template <typename TNum>
class DiscoverRequest {};

template <typename TNum>
class DiscoverResponse {};

template <typename TNum>
class DataRequest {};

template <typename TNum>
class DataResponse {};

template <typename TNum>
using BlockActor = caf::typed_actor<
    /* ERROR NEXT LINE */
    caf::replies_to<DiscoverRequest<TNum>>::with<DiscoverResponse<TNum>>,
    caf::replies_to<DataRequest<TNum>>    ::with<DataResponse<TNum>> >;

エラーメッセージ:

Block.hh:13:71: error: type/value mismatch at argument 1 in template
parameter list for 'template<class ... Sigs> class caf::typed_actor'

caf::replies_to<DiscoverRequest<TNum>>::with<DiscoverResponse<TNum>>,
                                                                  ^
Block.hh:13:71: error: expected a type, got   
'(caf::replies_to<DiscoverRequest<TNum> >::with < <expression error>)'

DiscoverRequest<TNum>しかし、 andDiscoverResponse<TNum>を特定のインスタンス化 (たとえば、 など)に置き換えると、DiscoverRequest<float>うまくコンパイルされます。したがって、CAF 内部の何かがそのような構造の使用を禁止していると思います。

私のコンパイラは GCC G++ 4.9.2 (-std=c++11もちろん 付き) で、Fedora 21 で動作しています。CAFはそのブランチの最新リビジョンmasterであり、Git サブモジュールとしてプロジェクトにリンクされています。

4

2 に答える 2

2

templateキーワードがありません。

そのはず

template <typename TNum>
using BlockActor = caf::typed_actor<
    typename caf::replies_to<DiscoverRequest<TNum>>::template with<DiscoverResponse<TNum>>,
    typename caf::replies_to<DataRequest<TNum>>    ::template with<DataResponse<TNum>> >;
于 2015-05-06T07:57:48.293 に答える