Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数签名作为函数模板参数_C++_Templates_Visual C++_Specialization - Fatal编程技术网

C++ 函数签名作为函数模板参数

C++ 函数签名作为函数模板参数,c++,templates,visual-c++,specialization,C++,Templates,Visual C++,Specialization,我想使用函数签名作为模板参数。它对类非常有效,但当我对函数模板尝试相同的技巧时,msvc抛出了一个错误: 错误C2768:“Func”:非法使用显式模板参数 这是我的密码: template <typename Signature> void Func(); template <typename R, typename A1> void Func<R(A1)>(); 模板 void Func(); 模板 void Func(); 我应该怎么做才能使它工作

我想使用函数签名作为模板参数。它对类非常有效,但当我对函数模板尝试相同的技巧时,msvc抛出了一个错误:

错误C2768:“Func”:非法使用显式模板参数

这是我的密码:

template <typename Signature>
void Func();

template <typename R, typename A1>
void Func<R(A1)>();
模板
void Func();
模板
void Func();

我应该怎么做才能使它工作?

您不能部分地专门化该语言不支持的函数模板。您可以做的是创建一个部分专用的类模板,其中包含一个静态成员函数,以及一个可能的蹦床函数,该函数将实例化该类模板并调用静态函数

大概是这样的:

namespace detail
{
    template<typename Signature>
    struct helper;

    template<typename R, typename A1>
    struct helper<R(A1)>
    {
        static void call()
        {
            // Do stuff with R and A1...
        }
    };
}

template<typename Signature>
void Func()
{
    detail::helper<Signature>::call();
}
名称空间详细信息
{
模板
结构助手;
模板
结构辅助程序
{
静态void调用()
{
//用R和A1做一些事情。。。
}
};
}
模板
void Func()
{
detail::helper::call();
}

不能部分专门化该语言不支持的函数模板。您可以做的是创建一个部分专用的类模板,其中包含一个静态成员函数,以及一个可能的蹦床函数,该函数将实例化该类模板并调用静态函数

大概是这样的:

namespace detail
{
    template<typename Signature>
    struct helper;

    template<typename R, typename A1>
    struct helper<R(A1)>
    {
        static void call()
        {
            // Do stuff with R and A1...
        }
    };
}

template<typename Signature>
void Func()
{
    detail::helper<Signature>::call();
}
名称空间详细信息
{
模板
结构助手;
模板
结构辅助程序
{
静态void调用()
{
//用R和A1做一些事情。。。
}
};
}
模板
void Func()
{
detail::helper::call();
}