我试图弄清楚如何让 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
get C
。C
总是CORBA::Any
。但B
取决于A
(在编译时已知)。
我做了一些研究,看起来Boost::MPL::bind
可以做我需要的(我们已经需要 Boost),但我不明白语法。这一切都可以在宏中完成,但如果可以的话,我宁愿把它作为“真正的”模板。
有什么建议么?