gpt4 book ai didi

c++ - 为将成员函数指针作为模板参数的成员函数定义代理

转载 作者:行者123 更新时间:2023-11-28 01:19:25 26 4
gpt4 key购买 nike

我正在使用第三方库,其中包含一个声明如下的类:

template<typename Ret, typename... Args>
class Delegate<Ret(Args...)>
{
// ...
};

它有一些模板成员函数,有两个模板参数。第一个参数是类类型,第二个参数是成员函数指针:

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)>因为我不知道返回类型是什么,也不知道函数参数的个数

最佳答案

对于 C++17,您可以使用 auto:

template <typename C, auto m>
void MyConnect()
{
Delegate<void(int)> d;
d.connect<C, m>(this);
}

关于c++ - 为将成员函数指针作为模板参数的成员函数定义代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com