ルックアップテーブルを使用してその機能を実行する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
必要なことを実行できるようです(そして、すでにBoostが必要です)が、構文がわかりません。それはすべてマクロで行うことができたかもしれませんが、それができるのであれば、私はむしろ「実際の」テンプレートとしてそれを持ちたいと思います。
助言がありますか?