调用std :: unique_ptr指向的基础对象的operator()

时间:2019-03-03 11:15:47

标签: c++

我在此类中定义了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);

2 个答案:

答案 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);

或多或少是您的代码在这里的意思。