- 1
static_cast<SomeOtherClass>(this)->SomeMethod();
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+32
static_cast<SomeOtherClass>(this)->SomeMethod();
Чуваки лучше знают, что у них в this
-----
Далее следует развёрнутая дискуссия о пользе static_cast
Разве что какая-нибудь тонкость, но сложно придумать пример.
//Base *this;
Derived *p(this);
Впрочем, http://ideone.com/opMF7
Что-то пока не понял.
Поведение каста из Base в Derived определено только в одном случае - когда исходный объект на самом деле Derived (или его потомок), который кастанули в Base.
Пора отучаться приводить типы скобками.
error: no matching function for call to ‘A::A(B&)’
static_cast<A*>(this)
error: invalid static_cast from type ‘B* const’ to type ‘A*’
An expression e can be explicitly converted to a type T using a static_cast of the form
static_cast<T>(e) if the declaration “T t(e);” is well-formed, for some invented temporary variable t (8.5). The effect of such an explicit conversion is the same as performing the declaration and initialization and then using the temporary variable as the result of the conversion.
Пример каста из указателя в объект:
http://ideone.com/gNxPQ
Пример каста из объекта в указатель:
http://ideone.com/h33dM
Да, страуструп тут уже не при делах.
Степанов, что создал знаменитую изрядно нашумевшую STL, темболее туда не ходит. Даже открещивается от того, что её создал. Говорит, что С++ и в особенности стл спроектированы изрядавон плохо. Ему даже стыдно за себя в молодости и своих калл ег.
ЧИТАТЬ ДАЛЬШЕ>>>
7 минут назад ;)
ЧИТАТЬ ДАЛЬШЕ>>>
вот пример http://ideone.com/gIx5D
but we need to go deeper