問題是特定的,但解決方案是開放式的。我是一個單獨的編碼人員,希望與其他程序員打個仗。具有單個成員(也是自定義結構)的自定義結構(包裝器)集合到單個成員的集合
我有一個數學庫的包裝。包裝爲系統提供了一個一致的接口,同時允許我爲不同平臺切換數學庫。包裝器包含一個成員,所以對我的Matrix4x4包裝器類來說,有一個api_matrix_4x4結構作爲包裝器的唯一成員。
我目前的目標平臺有一個漂亮的小優化庫,其中一些漂亮的函數需要包裝器的嵌入成員的C風格的數組,而我的包裝函數,這些數學API函數不希望公開成員類型到系統的其餘部分。所以我們有一些包裝器(參考/指針)進入函數,&函數中的集合中需要wappers的成員,所以他們可以傳遞給數學API。
我主要使用C++,包括C++ 11的功能,&也可以走C風格。理想情況下,我想要一個沒有例外的解決方案,即使不是全部動態分配,也要儘量避免。我的包裝函數可以使用標準庫數組或向量,或者C型指針指向數組作爲參數,無論內部需要什麼,只需要動態轉換(運行時類型信息)。
1)我可以將包含單個自定義結構的自定義結構/類轉換爲自定義結構嗎?如果是這樣,那麼如果它是它們的標準庫集合呢?我正在考慮在這裏進行類型切片。
2)你可能使用模板來掩蓋傳遞給函數的類型,雖然實現只能作用於單一類型(基於使用的數學API),還是被認爲是不好用的模板?
3)你能想出一個漂亮的解決方案,可能涉及交換/移動語義/安置?如果是這樣,請告訴我關於它的幫助。
4)或者我辭職到明顯的位置,迭代一個集合,將成員放到另一個集合中,然後將其用於API函數?
的什麼,我由包裝結構&包裝函數簽名做例如,我試圖避免&例如做的是通過函數實現給定:
struct Vector3dWrapper
{
API_Specific_Vector_3d m_api_vector_3d;
inline void operation_needing_vector_3d_wrappers(std::vector<Vector3d>& vectors)
{
// Now need a collection of API_Specific_Vector_3ds
try
{
std::Vector<API_Specific_Vector_3d> api_vectors;
api_vectors.reserve(vectors.size());
for(auto vectors_itr = vectors.begin(); vectors_itr != vectors.end(); ++vectors)
{
// fill each Vector3d.m_api_vector_3d into api_vectors
}
}
catch(std::bad_alloc &e)
{
// handle... though in reality, try/catch is done elsewhere in the system.
}
// Signature is API_Multiply_Vectors_With_Matrix_And_Project(API_Specific_Vector_3d* vectors, size_t vector_count)
API_Multiply_Vectors_With_Matrix_And_Project(&api_vectors, api_vectors.size());
}
};
這個問題涵蓋了相當廣泛的話題。你能更具體一些,舉一些例子嗎? – leftaroundabout 2012-04-01 14:55:09