1
一個在Stroustrup的書中的練習內容如下:我將如何重新實現dynamic_cast?
編寫模板
ptr_cast
工作方式類似於dynamic_cast
,除了它拋出bad_cast
而不是返回0。
我設法唯一的解決辦法想出了通過包裝dynamic_cast
適當的欺騙:
template<typename Dst, typename Src>
Dst ptr_cast(Src* p) {
Dst pt = dynamic_cast<Dst>(p);
if (!pt)
throw std::bad_cast();
return pt;
}
class B {
public:
virtual ~B();
};
B::~B() {}
class D : public B {};
class C {};
int main() {
B* pb = new D;
D* pd = ptr_cast<D*>(pb); // passes
C* pc = ptr_cast<C*>(pb); // throws as planned
return 0;
}
不過,我有一個揮之不去的停賽icion,這不是作者的意思。有沒有人有更好的主意?該項目標有一顆星,這意味着它必須是非常明顯的東西。
'dynamic_cast'是C++的基礎部分。除此之外,沒有別的辦法可以替代它了,除了上面寫的內容之外,我想不出任何可能的方式來解釋這個問題。 –