【发布时间】:2019-01-14 03:19:53
【问题描述】:
我最近写了关于类成员函数回调的功能。我需要保存回调对象和函数指针,然后调用函数指针并在需要回调的地方填写适当的参数。
我一开始是typedef void (AAA::*Function)(int a, int b);的一种形式,但是当我需要支持成员函数的不同参数列表时,我显然需要一种动态的方式来实现它。
class AAA
{
public:
int add(int a, int b)
{
return (a + b);
}
};
class BBB
{
public:
void setValue(std::string value)
{
this->value = value;
}
private:
std::string value;
};
class CCC
{
public:
void bind(??? p) // Binding objects and callback functions.
{
this->p = p;
}
template <class... Args>
auto callback(Args&&... args) // Autofill parameter list.
{
return this->p(std::forward<Args>(args)...);
}
private:
??? p; // How is this function pointer implemented?
};
int main()
{
AAA aaa;
BBB bbb;
CCC ccc;
ccc.bind(???(aaa, &AAA::add));
int number = ccc.callback(5, 6);
ccc.bind(???(bbb, &BBB::setValue));
ccc.callback("Hello");
system("pause");
return 0;
}
不知道怎么实现函数指针“???”。
【问题讨论】:
标签: c++ c++11 visual-c++ c++14 c++17