c++ - 作为模板的属性的属性

标签 c++ properties

我尝试将 C++ 属性实现为 WikiPedia 中定义的模板

template <typename T> class property {
        T value;
    public:
        T & operator = (const T &i) {
            ::std::cout << i << ::std::endl;
            return value = i;
        }
        // This template class member function template serves the purpose to make
        // typing more strict. Assignment to this is only possible with exact identical
        // types.
        template <typename T2> T2 & operator = (const T2 &i) {
            ::std::cout << "T2: " << i << ::std::endl;
            T2 &guard = value;
            throw guard; // Never reached.
        }
        operator T const & () const {
            return value;
        }
};

现在假设我声明了 2 个类,其中一个包含另一个作为属性:

class A
{
    public:
        Property<double> pA1;
        Property<double> pA2;
};

class B
{
    public:
        Property<A> pB1;
        Property<double> pB2;
};

现在,有没有办法在其中声明一个 B 并访问 A 的属性?

B b;
b.pB1.pA1=1;

不起作用并且;

((A) b.pB1).pA1=1;

工作时没有错误,但实际上并没有改变 B 的实际 A,因为访问 ((A) b.pB1).pA1 给出了不变的值,因为它可能会复制一份。

有没有不用指针的方法?

最佳答案

将一个对象转换为另一种类型会导致临时拷贝在该行代码完成后立即超出范围。您是想写 ((A&) b.pB1).pA1=1; 吗?

关于c++ - 作为模板的属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807600/

相关文章:

将多个类实例属性声明为数字的 pythonic 方法?

eclipse - Eclipse 编辑器的只读属性 View

c++ - 为什么要重置全局定义的静态变量?

c++ - 哪个算法需要 "visitor"(boost 库中的术语)?

c++ - 直接删除一个vector值怎么会导致内存泄漏呢?

c++ - 如何在C++中定义运行时异常?

java - JSF : commandLink as a parameter for outputFormat

java - 用于参数注入(inject)/属性管理的良好库

c++ - OpenGL 文本随相机移动,纹理也表现出与专家建议相同的方式

javascript - Polymer 添加具有属性的 Html 标签