我有一个内部连续内存块的迭代器,并且在调用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&>
表现为内置类型时。
很清楚我的方法是完全错误的,所以我想知道是否有其他人对如何实现相同的目标有任何想法,但更好的方式?
谢谢!
答案 0 :(得分:0)
您在寻找std::ref()
吗?
http://en.cppreference.com/w/cpp/utility/functional/ref
它是一个返回std::reference_wrapper<T>
的函数。反过来,该类型具有对绑定引用类型的隐式转换。
它并不完全是您正在寻找的东西,但它可能尽可能接近(而且它已经准备好了)。使用隐式赋值,您可以将其传递给另一个带有包装类型参数的函数,但它不会让您对底层对象上的方法进行点访问。 AFAIK出局了。