使用C ++中的匿名子类实例初始化指向(虚拟)对象的全局指针

时间:2015-12-29 08:24:47

标签: c++

考虑以下虚拟类:

class Base {
    Base(size_t param);

    virtual double func_a(int x, int y) = 0;
    virtual double func_b(int z) = 0;
}

本质上,您将使用由子类重写的函数集合使用的参数来实例化此类。我将传递对此类对象的引用,以便参数化其他函数,此时我创建匿名子类实现。

Catch:Base的函数有3个(对)实现,我一直使用 。我想在我的标题中有3个全局变量引用这些实现的实例。所以我有:

//Base.h
class Base { ... }

Base * impl_one;
Base * impl_two;
Base * impl_three;

我已尝试过多种方法来获取内联声明的匿名类并将其存储在Base.cpp中的这些变量中,但它们都会导致不同类型的错误:

//gives "[anonymous class] cannot be defined in a type specifier"
impl_one = new class : public Base { ... }

//gives "C++ requires a type specifier for all declarations" error
class P : public Base { ... }
impl_one = new P(64);

等等。但是如果可能的话,我不想写一个我在prep()顶部调用的main方法,它在外部设置全局值。有没有办法创建虚拟类的一次性匿名子类并将它们同时存储在变量中,就像我已经完成Base * impl_one = new Base(64)并且没有虚拟方法一样?

感谢〜

1 个答案:

答案 0 :(得分:1)

类定义需要一个半合作来完成它。 否则,下一个标识符将被视为该类的实例。

可以声明一个全局变量(没有初始化。

extern Base * impl_one;

然后在.cpp文件中使用,但您需要确认'类型。

//gives "C++ requires a type specifier for all declarations" error
class P : public Base { ... };  // <<<< added ';'
Base * impl_one = new P(64);

上面的代码为我编译(填写构造函数等等)。