我甚至不知道参数转发的想法是否是一个实际主题,或者该术语是否正确描述了我的想法。我将从一个例子开始。
.filter
在这里,var $html = $( html );
offset += $html.filter('div.post').length;
确实是一种向量,或者看起来就像是某种向量。它表示编号元素的集合,每个元素都有两个(比如说是double)属性。如您所见,这些属性只能通过getter方法访问,因为在返回实际值之前需要执行一些复杂的计算。
现在,我想做的是使class sort_of_vector
{
// Some data here. Much data.
size_t size;
double property1(unsigned int index)
{
// Do some computation on the index and data.
}
double property2(unsigned int index)
{
// Do some computation on the index and data.
}
};
在接口方面与实际向量更相似。我希望sort_of_vector
可以对其进行调用,因此我可以通过sort_of_vector
调用[] operator
和property1
的getter。
有一种简单的方法可以做到这一点:
property2
这显然有效,但在性能方面存在一些问题。原则上,访问某个项目的[] operator
或class sort_of_vector
{
// Same as before
sort_of_vector_proxy operator [] (unsigned int index)
{
return sort_of_vector_proxy(this, index);
}
};
class sort_of_vector_proxy
{
sort_of_vector * vector;
unsigned int index;
sort_of_vector_proxy(sort_of_vector * vector, unsigned int index)
{
this->vector = vector;
this->index = index;
}
double property1()
{
return this->vector->property1(this->index);
}
double property2()
{
return this->vector->property1(this->index);
}
};
意味着设置一个全新的property1
设置其属性,通过它调用实际的getter并将其删除。
所以我想知道是否有更多有效的解决方案可以使我的property2
更加类似于这种方式的向量(sort_of_vector_proxy
),但没有任何性能下降。