我发现无法将可变参数模板与委托一起使用。但是,我确实发现您可以简单地在 ref 类上调用标准成员函数指针 - 我错误地有些“假设”无法做到这一点,因为我不相信您可以在没有编组的情况下在 C++/CLI 中做到这一点(尽管语法相似,但我仍然通过我的“编程”了解到这些是完全不同的平台。)
如果有人需要 C++CX 的可变参数“委托”,欢迎您使用此代码(并不是说它特别复杂)...无论如何,您不能在运行时组件中导出泛型/模板,所以它不像您'将会有不合集类型的问题。
template<typename MemberTyp, typename ReturnTyp, typename ...ParamTyps>
private ref class UWPDelegate
{
public:
typedef ReturnTyp(MemberTyp::*myFPTyp)(ParamTyps...);
private:
myFPTyp fp;
MemberTyp ^instance;
internal:
UWPDelegate(MemberTyp^ targetObject, myFPTyp targetMethod);
ReturnTyp operator()(ParamTyps... args);
};
template<typename MemberTyp, typename ReturnTyp, typename ...ParamTyps>
inline UWPDelegate<MemberTyp, ReturnTyp, ParamTyps...>::UWPDelegate(MemberTyp ^ targetObject, myFPTyp targetMethod)
{
fp = targetMethod;
instance = targetObject;
}
template<typename MemberTyp, typename ReturnTyp, typename ...ParamTyps>
inline ReturnTyp UWPDelegate<MemberTyp, ReturnTyp, ParamTyps...>::operator()(ParamTyps ...args)
{
return (instance->*fp)(args...);
}
然后您可以在本机类模板中使用它来接受可变委托参数。