小编Iri*_*iel的帖子

如何编写由函数模板化的原型转换?

我想通过编写一个由函数指针模板化的原型转换来重用代码:

template <typename Ret, typename A0, typename A1, Ret func(A0,A1)>
struct apply_func : proto::callable
{
  // Do something with func
};
Run Code Online (Sandbox Code Playgroud)

但是,函数本身是多态的,所以我不想指定它的确切签名.

我希望我的代码看起来像的简化版本(我使用外部转换的技术原因,我认为与我当前的问题无关 - 如果没有它们,我无法使递归工作):

template<typename R, typename A0, typename A1>
R plus_func(A0 lhs, A1 rhs) { return lhs+rhs; }

template<typename R, typename A0, typename A1>
R minus_func(A0 lhs, A1 rhs) { return lhs-rhs; }

struct my_grammar;
struct plus_rule : proto::plus<my_grammar, my_grammar> {};
struct minus_rule : proto::minus<my_grammar, my_grammar> {};

struct my_grammar
: proto::or_<
  proto::when<proto::terminal<proto::_>, proto::_value> 
, proto::when<plus_rule, proto::external_transform > 
, …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming boost-proto

6
推荐指数
1
解决办法
343
查看次数

标签 统计

boost-proto ×1

c++ ×1

metaprogramming ×1

templates ×1