允许可变参数自变量的功能作为模板函数自变量

问题描述

在C ++中,我们可以很容易地定义模板函数参数,如this问题中所示。但是,这仅允许具有定义的参数列表和返回值的函数。

我们可以使这些类型的模板参数如下:

template<typename R,typename P,R(*Func)(P)>
R proxy_func(P arg)
{
    // do some stuff...
    R&& res{ Func(std::forward(arg)) };
    // do some more stuff...
    return res;
}

但是,这里我们仍然限于固定数量的参数。

不会进行如下尝试(至少在MSVC 19.24.28315上如此),因为“模板参数'Func'无法使用,因为它遵循模板参数包并且无法从函数参数中推导'proxy_func'“

template<typename R,typename... P,R(*Func)(P...)>
R proxy_func(P... args)
{
    // do some stuff...
    R&& res{ Func(std::forward(args)...) };
    // do some more stuff...
    return res;
}

那么允许将任意函数用作模板参数的选项有哪些,并且-同样重要的是-允许将其 parameters 用作其使用的函数模板的参数(例如在上面的proxy_func中)?理想情况下,我将能够使用任何函数(最好是)模板参数proxy_func来调用Func,并能够应用其(proxy_funcFunc的参数。


编辑:我对使用功能- instance 作为模板参数特别感兴趣(例如,允许proxy_func的模板实例化可应用编译时优化基于各个Func)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)