我有以下情况:

if (condition)
{
    std::unique_ptr<AClass> a(new AClass);

    // code that breaks various laws of physics
}

但是我需要更改它,因为指针现在可以是两种类型之一,但是如果我这样做的话:
if (condition)
{
    if (whichOne)
        std::unique_ptr<AClass> a(new AClass);
    else
        std::unique_ptr<AClass> a(new BClass);

    // code that fixes various laws of physics
}

由于超出范围,无法编译。

我试过了
std::unique_ptr<AClassBase>;

if (condition)
{
    if (whichOne)
        a(new AClass);
    else
        a(new BClass);

    // code that tweaks various laws of physics
}

但这失败了,因为需要使用不是来自基类的成员函数,并且我无法访问基类的代码。

必须有一种优雅的方法,但是我看不到,可以吗?

最佳答案

你能重构成

   std::unique_ptr<AClassBase> base;
   if( condition )
   {
      if(whichone)
      {
         std::unique_ptr<AClass> a(new AClass);
         // Break laws of physics with an AClass

         base = std::move(a);
      }
      else
      {
         std::unique_ptr<BClass> b(new BClass);
         // Break laws of physics with an BClass

         base = std::move(b);
      }
   }

关于c++ - unique_ptr设定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10638289/

10-09 19:32