在包装的临时中返回对象引用

时间:2014-12-02 04:29:02

标签: c++

我有一个内部连续内存块的迭代器,并且在调用operator *时,我想包装迭代器指向的一个类,该类可以对基础类型执行的各种操作进行编组。 / p>

这是一个更好地解释自己的例子。

class iterator
{
private:
    some_t* _ptr;

public:
// ..
wrapper<some_t&> operator *() { return wrapper<some_t&>(*_ptr); }
// ..
};

int main(int argc, char** argv)
{
auto it = some_class.begin() // returns iterator above;

*it += 20; // do some operation that invokes the overload.

return 0;
}

我希望包装器的行为尽可能地与底层内置类型一样(所有运算符,二进制,一元,布尔等等)但是上面已经证明很难实现并且非常混乱,特别是当我希望wrapper<some_t*>wrapper<some_t&>表现为内置类型时。

很清楚我的方法是完全错误的,所以我想知道是否有其他人对如何实现相同的目标有任何想法,但更好的方式?

谢谢!

1 个答案:

答案 0 :(得分:0)

您在寻找std::ref()吗?

http://en.cppreference.com/w/cpp/utility/functional/ref

它是一个返回std::reference_wrapper<T>的函数。反过来,该类型具有对绑定引用类型的隐式转换。

它并不完全是您正在寻找的东西,但它可能尽可能接近(而且它已经准备好了)。使用隐式赋值,您可以将其传递给另一个带有包装类型参数的函数,但它不会让您对底层对象上的方法进行点访问。 AFAIK出局了。