C++ 带方法签名的模板函数

C++ 带方法签名的模板函数,c++,templates,C++,Templates,我知道有可能实现这样的目标: template<typename T_Signature> class FooBar; template<typename T_Return, typename ... T_Params> class FooBar<T_Return(T_Params ...)> { ... }; 模板 福巴级; 模板 福巴级 { ... }; 但是,普通函数不支持(部分)专门化。还有可能得到同样的效果吗?例如: std::fu

我知道有可能实现这样的目标:

template<typename T_Signature>
class FooBar;

template<typename T_Return, typename ... T_Params>
class FooBar<T_Return(T_Params ...)>
{
    ... 
};
模板
福巴级;
模板
福巴级
{
... 
};
但是,普通函数不支持(部分)专门化。还有可能得到同样的效果吗?例如:

std::function<void(int,std::string)> x = function_proxy<void(int,std::string)>(&some_func);
std::function x=function\u proxy(&some\u func);

我想做的是有一个普通(在名称空间/全局中)函数(->不包含在任何类或其他结构中),它将函数签名作为模板参数。

函数签名只是一个类型。所以你可以接受,没问题

如果您想将其解包以获取其组成类型,或者只获取函数签名而不获取其他类型,那么您必须做更多的工作。traits类之类的东西“is signature”和助手,用于提取arg计数、返回值和参数(可能是元组类型)


它不会像专门化案例那样工作。

您忘记了
类FooBar
中,也许您想为您的问题添加更多细节实际上您没有在这里部分专门化函数,只是类,这在c++中得到了完全支持。我知道我可以用类实现它,如上图所示。但是,我想用普通函数实现同样的效果。如果你真的需要部分专门化,你可以使用类专门化和重载括号操作符。。。