相关疑难解决方法(0)

C++ 11是否具有C#风格的属性?

在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# c++ class c++11

89
推荐指数
11
解决办法
6万
查看次数

可以转换C#get,将代码设置为C++

我在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# c++ visual-studio-2010 visual-c++

21
推荐指数
2
解决办法
3349
查看次数

Const引用字段作为C++类中的readonly属性

在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++ oop properties reference design-principles

16
推荐指数
2
解决办法
1869
查看次数

c ++派生纯抽象w /嵌套结构

我正在尝试建立一个类似于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++ inheritance properties nested-class pure-virtual

5
推荐指数
1
解决办法
733
查看次数