我有一个名为newParam = [1.0, 0.02]
norm_const = normalisation_omega(newParam, np.linspace(0.8, 1.2, 1E3))
omega_dist = omegaDistribution(name='omega_distribution', a = 1.0-0.2, b = 1.0+0.2)
x_range = np.linspace(0.8, 1.2, 1E3)
yVal = omega_dist.pdf(x_range, phi = 0.02, const = norm_const)
samples = omega_dist.rvs(phi = 0.02, const = norm_const, size = 1E3)
的类,它在内部保存一个类型为Base
的对象的容器。
然后我创建SomeType
。
现在我想在class Derived: protected Base
类中创建自定义迭代器,以便用户能够迭代Derived
类中容器中的对象。问题是Base
提供了我想要提供的更多功能,即我想隐藏SomeType
中提供的一些功能,并可能添加一些额外的数据字段和功能。
所以我试图做的一件事是像这样包裹SomeType
:
SomeType
然后在迭代器中的class AnotherType{
private:
SomeType& object;
public:
//Make visible what I want
}
内创建一个新的operator*()
对象并将其返回。
我的问题在于,我不能这样做:
AnotherType
注意"&"在汽车。
在我不能添加任何额外数据字段的情况下,另一个可能的解决方案是使用this之类的东西。但是我认为它是未定义的行为。
有什么想法吗?
答案 0 :(得分:1)
由于您希望迭代器返回引用,因此您需要有一个非临时对象,您可以返回引用。最简单的方法是让你的迭代器类包含AnotherType
的实例,并让AnotherType
的成员成为Base
的迭代器而不是引用,这样它就可以了在Derived
迭代器被修改时更新。
class AnotherType{
private:
Base::iterator iter;
public:
AnotherType(Base::iterator it) : iter(it) { }
//Make visible what I want
void Foo() { iter->Foo(); }
};