![](/img/trans.png)
[英]Best approach to declare as friend a class template without knowing one its template arguments
[英]c++ hold reference to template instance without knowing its arguments
)
我想知道如何創建對我不知道具體模板參數類型的模板化類的引用或指針。
例如我有
vector<int> a;
vector<float> b;
現在,我希望能夠創建一個變量(在這種情況下為c),該變量可以包含對a或b的引用或對vector的任何其他特殊化,例如:
vector<>& c; // <- generic reference to all specializations of class vector<T>
c = a;
cout << c.size() << endl;
c = b;
cout << c.size() << endl;
我知道一個事實,那就是不可能調用push_back或任何其他接受或返回模板類型參數的操作,但是我只想調用諸如size()等方法,這些方法不需要了解具體的模板參數。
非常感謝您的提前幫助!
那是不可能的。 模板是編譯器從中生成多個不相關類型的源。 如果要創建通用代碼,則可以:
您想要的是運行時多態性。 在C ++中,無論是否使用模板,都只能通過繼承和虛擬方法來完成。
因此,您唯一的選擇是創建一個基接口,然后創建一個繼承該基類的模板化類。 然后,您所有的專門類都共享同一個繼承的類,從中可以調用虛函數。
不幸的是,如果您無法控制模板化類(例如vector
,則無法使用此方法,因此在這種情況下,您無法執行此方法,除非構建一個提供常見行為並執行強制轉換的新類。在后台(類型擦除是一種自動執行此操作的增強模板方法,但我寧願自己寫我的具體情況下的類)。
我在這里的帖子可能會讓您感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.