首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >原生C++中类似C#的属性?

原生C++中类似C#的属性?
EN

Stack Overflow用户
提问于 2010-11-19 20:44:00
回答 6查看 13.5K关注 0票数 24

C# / .NET中,你可以这样做:

代码语言:javascript
复制
someThing.text = "blah";
String blah = someThing.text;

然而,上面的代码实际上并不直接与某物的文本字符串交互,它使用了一个get和set属性。同样,也可以使用只读属性。

有没有办法在原生C++中做类似的事情?(不是C++ .NET)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-19 20:46:03

在.NET中,属性是在幕后发出的实际getset函数的语法糖(实际上,它们不仅仅是语法糖,因为属性是在生成的IL中发出的,并且可以与反射一起使用)。因此,在C++中,您需要显式地编写这些函数,因为没有属性这样的概念。

票数 21
EN

Stack Overflow用户

发布于 2010-11-19 20:48:42

.NET中的属性与get和/或set成员函数相关联,因此它实际上只是语法糖。使用C++最接近的方法是使用重载来赋予getter和setter相同的名称:

代码语言:javascript
复制
const std::string &test() const { return text_; }
void test(const std::string &value) { text_ = value; }

显然,您仍然需要为调用提供括号:

代码语言:javascript
复制
someThing.text("blah");
String blah = someThing.text();
票数 3
EN

Stack Overflow用户

发布于 2010-11-19 21:49:27

是的,但这是特定于供应商的。微软有declspec(属性)。C++Builder的实现更高级一些(通过特定于供应商的__property关键字),因为您可以有索引访问器(可以是您希望的任何类型)。

还要检查一下(不依赖于特定于供应商的关键字):http://www.codeproject.com/KB/cpp/cpp_property_indexer.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4225087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档