C++ C++;以函数作为模板参数的函数调用包装器对象

C++ C++;以函数作为模板参数的函数调用包装器对象,c++,c++11,variadic-templates,C++,C++11,Variadic Templates,我想只使用C++11构建一个模板辅助对象,它可以用来包装C函数 我试图将给出的答案从包装器函数扩展到包装器对象,以便它可以包含状态: #包括 #包括 intfoo(inta,intb){返回a+b;} 模板 类AltFuncWrapper { 公众: 使用result\u type=typename std::result\u of::type; bool启用{false}; 结果类型exec(Args…Args) { 如果(已启用) { std::cout在程序中没有指定Args,因此无法推断

我想只使用C++11构建一个模板辅助对象,它可以用来包装C函数

我试图将给出的答案从包装器函数扩展到包装器对象,以便它可以包含状态:

#包括
#包括
intfoo(inta,intb){返回a+b;}
模板
类AltFuncWrapper
{
公众:
使用result\u type=typename std::result\u of::type;
bool启用{false};
结果类型exec(Args…Args)
{
如果(已启用)
{

std::cout在程序中没有指定Args,因此无法推断它是空包。
可以使用部分专用化捕获函数的参数:

template<auto F> class C;
template<typename RV, typename ...Args, RV (*F)(Args...)>
class C<F>
{
    ...
模板类C;
模板
C类
{
...

@Dani的解决方案促使我回头看看,这让我找到了自己的解决方案:

模板结构AltFuncWrapper;
模板
结构AltFuncWrapper{
...
};
#定义MAKE_WRAPPER(func)AltFuncWrapper{}
完整的解决方案是


它实际上只是@Dani的解决方案和来自的C++11模板详细信息的合并。

在我看来,此解决方案需要C++17,我要求C++11的可能性。感谢@Dani…虽然您的解决方案不适用于C++11,但它确实促使我返回,这使我找到了自己的解决方案。
template<auto F> class C;
template<typename RV, typename ...Args, RV (*F)(Args...)>
class C<F>
{
    ...