使用 static_cast 进行有用的向下转型的示例,它不会产生未定义的行为

san*_*ica 0 c++ downcast static-cast undefined-behavior

我想知道在没有未定义行为的static_cast情况下应用向下转型的简短代码示例。我环顾四周,发现很多文本(帖子、问答等)引用了标准的片段、解释等。但我没有找到任何例子来说明这一点(这让我感到惊讶)。

谁能提供一个这样的例子吗?

for*_*818 5

下沉过孔static_cast是奇怪重复模板模式 (CRTP) 典型实现的一部分。来自维基百科的例子:

template <class T> 
struct Base
{
    void interface()
    {
        // ...
        static_cast<T*>(this)->implementation();
        // ...
    }

    static void static_func()
    {
        // ...
        T::static_sub_func();
        // ...
    }
};

struct Derived : Base<Derived>
{
    void implementation();
    static void static_sub_func();
};
Run Code Online (Sandbox Code Playgroud)

Base“知道”它可以向下转换this为T*via static_cast(而不是dynamic_cast),因为 的整个目的Base是由 继承T。有关 CRTP 的更多详细信息,请参阅维基百科文章。