san*_*ica 0 c++ downcast static-cast undefined-behavior
我想知道在没有未定义行为的static_cast情况下应用向下转型的简短代码示例。我环顾四周,发现很多文本(帖子、问答等)引用了标准的片段、解释等。但我没有找到任何例子来说明这一点(这让我感到惊讶)。
谁能提供一个这样的例子吗?
下沉过孔static_cast是奇怪重复模板模式 (CRTP) 典型实现的一部分。来自维基百科的例子:
Run Code Online (Sandbox Code Playgroud)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(); };
Base“知道”它可以向下转换this为T*via static_cast(而不是dynamic_cast),因为 的整个目的Base是由 继承T。有关 CRTP 的更多详细信息,请参阅维基百科文章。