問題是關於在MS Visual C++ 11中開發的代碼,只能訪問STL,沒有提升。如何在STL容器中存儲模板化的異構對象
有一個包裝模板類,大致與此頭:
template <typename Payload>
class Wrapper {
Payload p;
std::string src;
Wrapper(std::string, Payload);
Payload get(); // returns payload
void set(Payload); // replaces payload
void operator()(); // uses payload
}
Payload
可以是任何東西 - 指針,詮釋,甚至重的物體。
後來,Wrapper
需要在容器中,像std::vector
- 但不管它們的具體參數類型。這給我帶來麻煩,因爲容器需要同質元素。
我已經嘗試了基類建議like this from KennyTM,但它給了我一些問題與方法get()
和set()
- 從載體使用時,因爲元素,看起來像一個基類,如果在所建議的方式使用那些需要投(?)那個答案。
你需要類型擦除類,比如'boost :: any',你可以自己實現,所以你可以避免Boost。 – Nawaz
KennyTM的解決方案僅適用於實際可以使用虛擬功能的情況。你不能在這裏因爲你的函數的返回類型是不兼容的。另外,對象根據模板參數的不同也不重要。它們仍然是不同尺寸的不同類型,這對集裝箱來說是最重要的。 – pmr