我有这个类定义了operator():
class Base{
...
public:
int operator()(int arg)
{
return arg+42;
}
virtual void run(void) = 0;
...
};
一些派生类:
class Derived : public Base
{
...
public:
void run(void)
{
//do something
}
};
然后就是这个数据结构
struct Routine
{
const uint16_t routine_id;
std::unique_ptr<Base> callback;
};
const Routine routines[] = {
{ 0x0001, std::make_unique<Derived>() },
{ 0x0002, std::make_unique<Derived2>() }
// etc
};
通过p调用operator()有比这更好的语法:
std::cout << routines[0].callback->operator()(21);
?
通过p调用operator()有比这更好的语法:
std::cout << routines[0].callback->operator()(21);
?
您可以取消引用指针:
std::cout << (*routines[0].callback)(21);
我建议在你的例程结构中添加一个operator():
struct Routine
{
const uint16_t routine_id;
std::unique_ptr<Base> callback;
int operator()(int arg) const
{
return callback->operator()(arg);
}
};
这样你就可以直接写了
std::cout << routines[0](21);
这或多或少是你的代码在这里意味着什么。