C++实现反射机制解决方案
C++实现反射机制
讨论一下用C++怎么实现类似Java的反射机制? 有什么好点的方法?
------解决思路----------------------
很遗憾,c++虽然不支援执行期的反射
但是编译期的反射能力很强大
C++不支援执行期间的反射,主要原因有两个
1 : 执行期间的反射会违反c++ "zero overhead"的原则
2 : 要在不违反zero overhead的情况下实现执行期的反射,据说并非
不可能,但是难度非常的高,c++社区没有这么多的资源实现这件相对来说
不太重要的事情
你想用反射做什么?让大家看看是否能提供另外一种(或n种)方法解决你的问题
当你的手上只有铁锤的时候,你会把所有的问题都当成钉子
------解决思路----------------------
我对windows编程不熟,如果只是要动态的判断是那个object发出的信息
可以靠最基础的多态来实现,没事尽量不要去碰RTTI
原因可以自己去翻阅effective c++ 3rd
想办法设计出一个统一的界面,善用virtual就可以动态判断出正确的type
如果你的函数需要传入参数,可以读一读如何使用std::bind和std::function
弹性会提高不少
讨论一下用C++怎么实现类似Java的反射机制? 有什么好点的方法?
------解决思路----------------------
很遗憾,c++虽然不支援执行期的反射
但是编译期的反射能力很强大
C++不支援执行期间的反射,主要原因有两个
1 : 执行期间的反射会违反c++ "zero overhead"的原则
2 : 要在不违反zero overhead的情况下实现执行期的反射,据说并非
不可能,但是难度非常的高,c++社区没有这么多的资源实现这件相对来说
不太重要的事情
你想用反射做什么?让大家看看是否能提供另外一种(或n种)方法解决你的问题
当你的手上只有铁锤的时候,你会把所有的问题都当成钉子
------解决思路----------------------
我对windows编程不熟,如果只是要动态的判断是那个object发出的信息
可以靠最基础的多态来实现,没事尽量不要去碰RTTI
原因可以自己去翻阅effective c++ 3rd
class basicMessage
{
public :
virtual double connect_time() = 0;
virtual std::string common_error() = 0;
virtual std::string special_error() = 0;
virtual int error_codes() = 0;
//.....and so on
~virtual basicMessage() {}
};
class error_message : public basicMessage
{
public :
//...define your implementation
};
class whatever_message : public basicMessage
{
public :
//...define your implementation
};
//....
想办法设计出一个统一的界面,善用virtual就可以动态判断出正确的type
如果你的函数需要传入参数,可以读一读如何使用std::bind和std::function
弹性会提高不少