gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:10:16 25 4
gpt4 key购买 nike

我尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com