我应该怎么做才能声明 forward A
,表示一个元素列表B
,每个元素都指向C
,那boost::recursive_wrapper
-s 指向A
?
在所有类型都是模板化的情况下特别感兴趣。说,
template< typename F > struct expression
: tagged, boost::spirit::extended_variant<
nil,
F,
boost::recursive_wrapper< expression_list< F >
> >
{...};
那么expression_list应该是什么?:
template< typename F > struct expression;
template< typename F >
using expression_list = std::list< expression< F > >;
... // definition of template< typename F > expression; here
不能在boost::recursive_wrapper
的模板参数列表中使用,但在
template< typename F >
struct expression_list;
... // definition of template< typename F > expression; here
template< typename F >
struct expression_list
: std::list< expression< F > >
{ ; }
有static_assert(!std::has_virtual_destructor< std::list< expression< F > > >::value, "has virtual destructor")
,因此也不能使用。