我在此类中定义了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);
?
答案 0 :(得分:5)
通过p调用operator()的语法是否比此更好:
std::cout << routines[0].callback->operator()(21);
?
您可以取消引用指针:
std::cout << (*routines[0].callback)(21);
答案 1 :(得分:0)
我建议在您的常规结构中添加一个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);
或多或少是您的代码在这里的意思。