我有一個type_info
對象,它定義了我的屬性映射中的屬性類型。我想用我的type_info對象定義的類型運行一些代碼(例如從cin讀取值)。這可能是一些模板功能,即:基於type_info對象的專業代碼
template<typename T>
void do_something()
{
T a; cin >> a;
}
然後在代碼的其它部分,我想叫它:
const type_info &type_description = foo.get_type_of_something();
do_some_magic(do_something, type_description);
我在尋找的do_some_magic
函數調用do_something
專門用於類型由type_descriptor
描述。模板函數可以封裝在某個結構中,沒關係。
當然,只有預先定義的有限類型的集合纔可能(因爲在編譯時必須爲每個類型生成專門化)。
一種方法是使鏈條if(type_descriptor==typeid(int)) /*...*/ else if(type_descriptor==...
等,但這不是很漂亮的解決方案(IMO)。
我想知道是否存在更清潔的解決方案?或者,也許一些庫(最好是「boost」)已經實現了這種機制?
我懷疑如果我們知道你真的想做什麼,我們會建議你去_type擦除_...也許甚至是一個'boost :: variant <>'... –