我正在嘗試一個基本的東西,有兩個類和一個免費函數。首先,我有兩個類:免費函數和繼承
struct BASE{
BASE(int a = 0):a_(a){};
virtual ~BASE(){};
virtual void foo(){std::cout << "BASE " << std::endl;}
int a_;
};
struct DERIVED: public BASE{
DERIVED():BASE(){};
void foo(){std::cout << "DERIVED " << std::endl;}
};
然後我填了一個std ::向量(或升壓:: ptr_vector)
std::vector<BASE* > vec;
vec.push_back(new BASE(2));
vec.push_back(new DERIVED);
如果我把我的函數foo,沒有PB虛擬的東西效果很好, 但如果我創建了兩個免費的功能:
void foo(BASE* a, DERIVED* b){
std::cout << " mix base/derived " << std::endl;
}
void foo(BASE* a, BASE* b){
std::cout << " full base " << std::endl;
}
,如果我做
foo(vec[0], vec[1]); //failed
我會得到的消息
full base
那麼它是符合邏輯的,因爲我有BASE *的載體,但它無論如何存在 去我的免費功能良好的通話?我需要繼承,所以我不能真正地分開這兩個類,因爲我必須填寫這個容器
此外,在最後我的向量將被隨機填充,所以我無法預先知道如何正確轉換。
如果您使用手動RTTI(枚舉等),你不需要'dynamic_cast','static_cast '足夠了 – 2012-12-05 13:46:57
不完全正確!考慮多重繼承(romb類) – zaufi
嗯,我正在矩陣之間進行線性代數。目前我有一個密集的矩陣類。當你乘以矩陣C = A * B時,你稱之爲blas GEMM求解器。但是如果你的矩陣之一是一個單位矩陣,你應該返回A或B並且什麼也不要。目前,ID矩陣是基於一個矩陣類,它不是最優的,我分配無用的內存,並且不需要調用DGEMM。我的矩陣填滿了矢量,操作是隨機執行的。我試圖在這個例子中簡化最大值。同意我應該避免使用dynamic_cast –