如果我有一個模板基類,需要派生類的類型,是安全的,這個基類的這個指針轉換爲派生類的類型?如果我將這個基類的指針轉換爲派生類型,它是否安全並定義好了?
考慮這個代碼,其中基類A
將此指針轉換爲模板參數(Derived
)。它還檢查提供的類型是否實際上是從這個類派生的。它顯然有效(在這裏),但是它有很好的定義?
#include <iostream>
class D;
template<typename Derived, typename T>
class A
{
public:
Derived *thisToDerived() {
static_assert(std::is_base_of< A<Derived, T>, Derived>::value, "not");
return static_cast<Derived*>(this);
}
private:
T m;
};
class D : public A<D, int>
{
private:
double d;
float f;
};
int main() {
D d;
std::cout<<"this: "<<&d<<"\nderived: "<<d.thisToDerived();
}
相關:https://stackoverflow.com/q/2469013/1896169 – Justin
也有關,幾乎可以解答:https://stackoverflow.com/q/4173254/1896169 – Justin
簡單地說,是的,這是安全 – Justin