如何在ISOC++中定义或实现C#属性?如何在ISOC++中定义或实现C#属性?假设以下C#代码:int_id;intID{得到{返回_id;}设置{_id=值;我知道C#在编译时将get和set行翻译成getXXX和setXXX方法。在C++中,程序员通常手动定义这两个函数,如:int_id;intgetID(){返回_id;}voidsetID(intnewID){_id=newID;但是,我希望C#语法或类似的东西具有简单的可用性。在C#中,我们可以使用以下属性:ID=10;//调用设置函数intCurrentID=ID;//调用get函数在C++中我们可以使用我们的函数:setID(10);//调用设置函数intCurrentID=getID();//调用get函数现在告诉我如何在ISOC++中实现C#属性。谢谢。正如AlexandreC.已经说过的那样,这非常尴尬且不值得,但请举例说明您可能如何做到这一点。模板类属性{private:void(TClass::*m_fp_set)(TPropertyvalue);TProperty(TClass::*m_fp_get)();TClass*m_class;内联TPropertyGet(void){return(m_class->*m_fp_get)();}inlinevoidSet(TPropertyvalue){(m_class->*m_fp_set)(value);}public:Property(){m_class=NULL;m_fp_set=NULL;m_fp_set=NULL;}voidInit(TClass*p_class,TProperty(TClass::*p_fp_get)(void),void(TClass::*p_fp_set)(TProperty)){m_class=p_class;m_fp_set=p_fp_set;m_fp_get=p_fp_get;}内联运算符TProperty(void){returnthis->Get();}内联TPropertyoperator=(TPropertyvalue){this->Set(value);}};在您希望使用它的类中,为该属性创建一个新字段,并且必须调用Init将get/set方法传递给该属性。(优先于.ctor)。类MyClass{private:int_id;intgetID(){返回_id;}voidsetID(intnewID){_id=newID;}public:属性标识;MyClass(){Id.Init(this,&MyClass::getID,&MyClass::setID);}};简短的回答:你不能。长答案:您可以尝试通过代理类模拟它们,但相信我,设置/获取函数带来的轻微不便是不值得的。您基本上已经定义了一个转发变量所有行为的类。很难做到正确,也不可能通用。很简单。与可变曝光相比,我认为这甚至没有开销。但是,您不能进一步修改此内容。当然,除非您在get和set上再添加两个模板参数,它们是要调用的函数的回调。模板类CProperty{public:typedefTNDataTypeTDDataType;私有:TDDataTypem_Value;公共:内联TDDataType&operator=(constTDDataType&Value){m_Value=Value;返回*这个;}内联运算符TDDataType&(){returnm_Value;}};不要将回调函数作为模板参数,只是数据成员是常量,必须在属性的构造函数中初始化。这本身比简单地编写get和set方法的开销要大,因为您是在gets和setting中进行函数调用的。回调将在运行时设置,而不是编译时。以上是C#学习教程:HowtodefineorimplementC#propertiesinISOC++?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
