我有一个内部连续内存块的迭代器,在调用operator *
时,我想将迭代器指向的内容包装到一个类中,该类封送可以在底层类型上执行的各种操作。
这里有一个例子可以更好地解释我自己。
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&>
表现为内置类型时。
很明显,我的方法完全是错误的,所以我想知道是否有其他人对如何以更好的方式实现相同的目标有任何想法?
谢谢!
你在找std::ref()
吗?
http://en.cppreference.com/w/cpp/utility/functional/ref
这是一个返回std::reference_wrapper<T>
的函数。 反过来,该类型具有到绑定引用类型的隐式转换。
它并不完全是你要找的,但它可能尽可能接近你所能得到的(而且一切都准备好了)。 使用隐式赋值,您可以将其传递给另一个函数,该函数采用包装类型的参数,但它不允许您对基础对象上的方法进行点访问。 阿法克出来了。