C++ 在包装的临时文件中返回对象引用
我有一个指向内部连续内存块的迭代器,当调用C++ 在包装的临时文件中返回对象引用,c++,C++,我有一个指向内部连续内存块的迭代器,当调用操作符*时,我希望将迭代器指向的内容封装到一个类中,该类封送可以在底层类型上执行的各种操作 下面是一个更好地解释我自己的例子 class iterator { private: some_t* _ptr; public: // .. wrapper<some_t&> operator *() { return wrapper<some_t&>(*_ptr); } // .. }; int main(in
操作符*
时,我希望将迭代器指向的内容封装到一个类中,该类封送可以在底层类型上执行的各种操作
下面是一个更好地解释我自己的例子
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;
}
类迭代器
{
私人:
一些_t*_ptr;
公众:
// ..
包装运算符*(){return wrapper(*_ptr);}
// ..
};
int main(int argc,字符**argv)
{
auto it=some_class.begin()//返回上面的迭代器;
*it+=20;//执行一些调用重载的操作。
返回0;
}
我希望包装器的行为尽可能像底层内置类型一样(所有的运算符,二进制、一元、布尔等),但是上面已经证明很难实现,而且非常混乱,特别是当我希望wrapper
和wrapper
像内置类型一样行为时
很明显,我的方法是完全错误的,所以我想知道是否有其他人对如何更好地实现同样的目标有任何想法
谢谢大家! 您正在寻找
std::ref()
它是一个返回std::reference\u包装器的函数。该类型又具有到绑定引用类型的隐式转换
它并不完全是你想要的,但它可能是你能得到的最接近的(而且它已经准备好了)。通过隐式赋值,您可以将其传递给另一个接受包装类型参数的函数,但它不允许您访问底层对象上的方法。好了。从C++11开始,你还不能重载操作符。
,但是你可以重载操作符->
,这就是大多数迭代器和智能指针所做的。事实证明,我不关心操作符。
,它主要是算术和二进制操作符,如果我做了这样的事情,事情就不会破裂<代码>自动&ref=*it;ref+=10代码>。本质上,它的行为与大多数迭代器返回的通常的T&
引用完全相同,只是它实际上是一个包装器
,因此我可以覆盖我需要的一些操作。包装器
看起来如何?它是否有一些操作符T&
?它无论如何都不漂亮。。但是看看用法,看看demo/main.cpp
和libimg/bitmap\u iterator.hpp
对不起,没有,虽然偶尔有用,但我不需要std::ref()