我想弄清楚如何讓C++模板使用查找表來執行其功能,但在編譯時不運行時。我無法把它變成文字,所以這裏是一個例子,和醜陋模板+預處理器宏的組合,我到目前爲止有:編譯時綁定一個C++模板?
template<class T_POD, class T_Corba>
inline void c_to_corba_base(T_POD &In, CORBA::Any &Out) {
Out <<= static_cast<T_Corba>(In);
}
#define C_TO_CORBA_PAIR(T_POD, T_CORBA) \
inline void c_to_corba(T_POD &In, CORBA::Any &Out) { \
c_to_corba_base<T_POD, T_CORBA>(In, Out); \
}
C_TO_CORBA_PAIR(short, CORBA::Short)
C_TO_CORBA_PAIR(long, CORBA::Long)
C_TO_CORBA_PAIR(double, CORBA::Double)
// etc.
所以你可以看到,這類型轉換A
到B
得到C
。 C
總是CORBA::Any
。但B
取決於A
(在編譯時已知)。
我已經做了一些研究,它看起來像Boost::MPL::bind
可能做我所需要的(我們已經需要升壓),但我不明白的語法。它可以全部在宏中完成,但如果可以完成,我寧願將其作爲「真實」模板。
有什麼建議嗎?
我收集了一個'<< ='運算符,該運算符理解如何處理左側,該左側是對集合['中的'CORBA :: Any'和右側的引用] CORBA :: Short','CORBA :: Long','CORBA :: Double' ... etc.]所以你有一個很好的理由來介紹這個'c_to_corba'函數,而不是增強'<< ='定位一個'CORBA :: Any'接受簡單的類型? – HostileFork
這對'corba_to_c'來說會更復雜一點。我問了同樣的問題,我試圖幫助這個人,他有一些問題。 –