调用std :: unique_ptr指向的底层对象的operator()

问题描述 投票:2回答:2

我有这个类定义了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);

?

c++
2个回答
5
投票

通过p调用operator()有比这更好的语法:

std::cout << routines[0].callback->operator()(21); 

?

您可以取消引用指针:

std::cout << (*routines[0].callback)(21);

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

这或多或少是你的代码在这里意味着什么。

© www.soinside.com 2019 - 2024. All rights reserved.