【发布时间】:2015-07-16 04:59:30
【问题描述】:
我试图在C++ actor framework (CAF) 中声明一个强类型的actor,但我的代码由于某种原因无法编译。你能告诉我它有什么问题吗?
#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> 和 DiscoverResponse<TNum> 替换为特定的实例,例如 DiscoverRequest<float>,它确实可以很好地编译。所以,我认为 CAF 内部的某些东西禁止使用这种结构。
我的编译器是 GCC G++ 4.9.2(当然是 -std=c++11),在 Fedora 21 上运行。CAF 是其 master 分支的 latest revision,作为 Git 子模块链接到项目。
【问题讨论】:
-
我认为它错过了
template关键字,试试caf::replies_to<DiscoverRequest<TNum>>::template with<DiscoverResponse<TNum>> -
@Jarod42:
typename caf::replies_to<DiscoverRequest<TNum>>::template with<DiscoverResponse<TNum>>似乎有效,感谢您的想法!你应该把你的评论变成一个答案,这样我才能批准它。
标签: c++ c++11 actor c++-actor-framework