我正在使用带有这样声明的类的第三方库:
template<typename Ret, typename... Args>
class Delegate<Ret(Args...)>
{
// ...
};
,它具有一些具有2个模板参数的模板成员函数。第一个参数是类类型,第二个参数是成员函数指针:
template<typename Class, Ret(Class:: *Member)(Args...) const>
void connect(Class *instance);
template<typename Class, Ret(Class:: *Member)(Args...)>
void connect(Class *instance);
然后像这样使用它:
class A
{
void f(int)
{ }
void foo()
{
Delegate<void(int)> d;
d.connect<A, &A::f>(this);
}
};
我想创建一个代理模板函数MyConnect
,该函数仅将参数转发到Delegate's
connect
class A
{
void f(int)
{ }
void foo()
{
MyConnect<A, &A::f>(this);
}
template <???>
void MyConnect(???)
{
Delegate<void(int)> d;
d.connect<???, ???>(this);
}
};
我无法执行此template <typename Class, void(Class::*Member)(int)>
,因为我不知道返回类型是什么,也不知道函数参数的数量
答案 0 :(得分:2)
对于C ++ 17,您可以使用auto
:
template <typename C, auto m>
void MyConnect()
{
Delegate<void(int)> d;
d.connect<C, m>(this);
}