0

鉴于:

A 类的对象包含一个对象数组。

这些对象中的每一个都必须实现一些接口 IB,因为 A 使用 IB 的方法。

这些对象由客户端传递给 A 类的对象,它们属于 C 类型或其子类。A 必须将这些对象返回给客户端。

问题:A必须对C一无所知,只知道IB,但A必须返回C。

C++ 中是否有没有不安全强制转换<> 的标准解决方案?

4

2 回答 2

0

您可以使用模板实现一个完全安全的类。

template  <typename T>class A
{
    std::vector<IB*> myObj;

public:


    void add(IB* anObj)
    {
        myObj.push_back(anObj);
    }

    void get(int anIndex, T*& anObj)
    {
        T* t = dynamic_cast<T*>(myObj[anIndex]);
        anObj = t;
    }
};

然后像这样使用。

A<C> a;

演示在这里给出

于 2012-07-25T15:51:19.607 回答
0

不认为这是A不可能的。然而,在 C++ 中足够了解使用正确的接口并不难。让所有类都派生自一个抽象基类,其中接口定义为纯虚函数。这实际上对应于正确的 C++ 设计——将接口与实现分离——如Sutter & Alexandrescu中所述。CAIB

否则,如果上面确实不可能,您可以创建A一个模板类,并将数组元素存储为void*,使用 . 解析类类型(在编译时)static_cast

于 2012-07-25T15:44:49.320 回答