【发布时间】:2017-11-04 17:30:01
【问题描述】:
我想允许其类型被指定为模板参数的可调用对象有多个签名。更具体地说,我有一个模板化的update 方法,它接受一个必须返回float 的可调用对象,并使用它来更新数据网格中的值。对此的简化说明是
template <typename Fn>
void update(Fn&& fn_)
{
for (Vec3 pos : m_grid)
{
float val = fn_(pos, m_grid)
m_grid(pos) = val;
...
在上述情况下,fn_ 的签名必须始终将 pos 和 grid 作为参数,即使它们在实现中被忽略
我想使用一些模板魔法来允许回调签名的多种排列。
特别是,我希望允许采用pos 但不采用grid 的回调,以及根本不采用任何参数的回调。我不介意参数的顺序是否被强制执行。
任何人有任何关于如何做到这一点的提示吗?我不介意使用 boost 或其他库,但它们应该只是标题。
【问题讨论】:
标签: c++ templates lambda c++14 variadic-templates