在C#中,对于具有getter和setter的字段,有一个很好的语法糖.而且,我喜欢允许我编写的自动实现的属性
public Foo foo { get; private set; }
Run Code Online (Sandbox Code Playgroud)
在C++中我必须写
private:
Foo foo;
public:
Foo getFoo() { return foo; }
Run Code Online (Sandbox Code Playgroud)
在C++ 11中是否有一些这样的概念允许我对此有一些语法糖?
我在C#中有以下代码:
public string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以转换它并使用get和set这种方式?我知道你不能这样声明我需要":"来声明但是当我尝试这样做时:
public:
std::string Temp
{
get { return sTemp; }
set {
sTemp = value;
this.ComputeTemp();
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误是在第一个"{"说明expected a ';'.有关如何解决它的任何建议?
在C++类中使用const引用字段作为只读getter是否合适?
我的意思是,这段代码是否符合良好做法?
class check{
private:
int _x;
public:
const int& x = _x;
void setX(int v){
_x = v;
}
};
Run Code Online (Sandbox Code Playgroud)
它非常像C#属性,恕我直言,并且在类使用代码中非常简单和干净:
check s;
int i;
std::cin >> i;
s.setX(i);
std::cout << s.x << '\n';
s.setX(7);
// s.x = i; // Error
std::cout<<s.x<<'\n';
Run Code Online (Sandbox Code Playgroud) 我正在尝试建立一个类似于c#属性概念的语法糖.
我读过这篇文章:原生c ++中的C#属性?.这很有帮助,但缺乏我想要的设计.我还恭敬地不同意那里的几个断言,即属性概念是不好的形式,因为我没有看到一组标题为get_id()和set_id()的方法与暴露相同概念的运算符重载之间的区别,允许代码在使用类时更干净,并且通常不鼓励公共访问私有字段,也将公共实现与私有设计分离.
但是,我提出的代码(受该链接的启发)真的很糟糕,并且很难维护.我想知道是否有人有任何建议来清理它,或者更重要的是,知道更好的方法来做到这一点.
class someClass
{
public:
struct someProperty_struct{
virtual someProperty_struct& operator=(const int&){return *this;}
virtual operator int(){return 0;}
}someProperty;
};
class derivedClass : someClass
{
int i;
public:
struct intProperty: someClass::someProperty_struct
{
protected:
friend class derivedClass;
derivedClass *outer;
public:
virtual someProperty_struct& operator=(const int& value){
outer->i = value;
return *this;}
virtual operator int(){return outer->i;}
};
derivedClass()
{
intProperty p = intProperty();
p.outer = this;
someProperty = p;
}
};
class consumerClass
{
public:
someClass* data;
consumerClass() …Run Code Online (Sandbox Code Playgroud) c++ ×4
c# ×2
properties ×2
c++11 ×1
class ×1
inheritance ×1
nested-class ×1
oop ×1
pure-virtual ×1
reference ×1
visual-c++ ×1