【发布时间】:2017-02-24 22:27:33
【问题描述】:
我正在尝试编写一个在 C++ 中“管理”委托的类。我已经为我实现了委托类。我希望这个委托管理器类有两个功能:
将指针指向具有给定输入参数/返回类型的特定类型的委托实例,并将其缓存。
另一个函数将采用正确类型的成员函数,以便将缓存的委托实例绑定到它。
目前,我有:
template<typename... Args>
struct FunctionParamsPack { };
这是此函数采用的参数类型的容器。即foo(int i, double d) 将是int 和double。我正在听从here 的建议。
然后我有DelegateInfoPack 类:
template<typename FuncRetType,typename... FuncParams>
struct DelegateInfoPack{
//for look-up by components in the program
typedef typename DelegateClass<FuncRetType, FuncParams...> _Delegate;
//for the delegate manager
typedef typename FuncRetType _FuncRetType;
typedef typename FunctionParamsPack<FuncParams...> _FuncParams;
};
这个结构体包含在程序中的组件中,它定义了三个类型名,其中两个将在 DelegateManger 类中使用:
template<typename DelegateInfoPack>
class DelegateManager
{
typedef typename DelegateInfoPack::_Delegate _Delegate;
typedef typename DelegateInfoPack::_FuncRetType _FuncRetType;
typedef typename DelegateInfoPack::_FuncParams _FuncParams;
void CacheDelegate(_Delegate* del,...) {}
template<typename UserClass>
void BindDelegate(..., _FuncRetType(UserClass::*fp)( _FuncParams())) {} //Doesn't work!
}
我的问题在于BindDelegate() 函数。我无法为具有给定返回类型和输入参数类型的类型的成员函数创建正确的签名。
基本上,我需要知道如何让正确的函数指针类型具有给定的返回类型和参数类型,以便我的 BindDelegate 将其作为参数。
【问题讨论】:
-
为什么不使用 std::function?
-
@Evgeniy 我不熟悉它们。你愿意展示一下吗?
标签: c++ templates delegates function-pointers variadic-templates