2015-12-20 86 views
3

我现在有这样的:C++ - 如何创建一个属性,可以在类中使用_

template <typename T> 
class property<T, kPropertyReadOnly> { 

    T value; 

public: 
    property() {} 
    property(T initValue) : value(initValue){} 

    T & operator = (const T &i) { 
     return value = i; 
    } 

    operator T const &() const { 
     return value; 
    } 
}; 

哪种带来的性能C++。比方说,我们有一个类:

class foo { 
    property<int> myProperty; 
} 

然后,我希望能够使用属性从外面的世界是这样的:

Foo foo(); 
foo.myProperty = 2; 

但Foo类里面,我想要能做到这一点:

void Foo::myFooFunction() { 
    _myProperty = 2;  
} 

这种方式是很清楚什么是实例变量/属性,但来自外部使用时,你不必做这个丑陋的东西:

foo._myProperty = 2; 

我知道模板可以做很多魔术,但他们可以这样做吗?

+0

为了减少与编译器的符号碰撞的可能性,我建议使用'_'作为*后缀*(最后),而不是作为*前缀*(在开始处)。 –

+0

你能进一步解释为什么吗?我想在开始时使用它,因为然后autocompletion帮助很大,当输入下划线时,您会看到所有成员变量。 – keyboard

回答

3

如果我明白你的问题很好,你可以做的是与公共参考它的接口你的私有变量:

class Foo { 
    property<int> _myProperty; 
public: 
    property<int> &myProperty = _myProperty; 

    void myFooFunction() { 
    _myProperty = 2;  
    } 
}; 

Live Demo

+0

嘿,再次;)是的,这个工程,谢谢。但有没有更优雅的解决方案,不需要两条独立的线? – keyboard

+0

@keyboard我不这么认为。你至少需要两行代表变量和一个代替别名;) – 101010

+0

好的,谢谢。也许我会去一个定义,然后这对我来说;) – keyboard

相关问题