【发布时间】:2015-04-29 18:19:34
【问题描述】:
给定一个带有重载Boo* operator()(unsigned int) 的类Foo,应该如何访问重载的运算符?
我最初尝试过
std::unique_ptr<Foo> foo_ptr(new Foo);
Boo* boo_ptr = foo_ptr(1);
但这不起作用,所以我尝试了:
std::unique_ptr<Foo> foo_ptr(new Foo);
Boo* boo_ptr = foo_ptr->(1);
但这也不起作用(我没想到会这样)。相反,我必须这样做
std::unique_ptr<Foo> foo_ptr(new Foo);
Boo* boo_ptr = (*foo_ptr)(1);
这比在Foo 中声明一个方法(例如ByIndex(unsigned int))更冗长(并使其更短更简洁是我首先重载运算符的原因)。
有没有办法做到这一点而不必使用* 运算符来获取指针的基值?
【问题讨论】:
-
我实际上并没有在我的代码中 - 我只是在这里的示例中使用它来强调我从指针开始
-
@Columbo 显然没有通读全文。那时我真的不明白这个问题。 “有没有办法从没有
*的指针中获取对象”? -
@Columbo 在那里,将
new的使用更改为std::unique_ptr,这是我在我的代码中实际使用的。我只是第一次没有打扰,因为它根本不影响问题。 -
为什么人们这么反对这个?这个问题问得并不好,对于那些不太了解 C++ 内部工作原理的人来说,这是一个有效的问题。不幸的是,人们对此投了反对票,甚至没有说明为什么应该投反对票(这对于 OP 能够改进很重要!)。来自我的 +1。
-
@Kvothe 有区别。智能指针可能超载
operator()。unique_ptr没有,但我们不知道你用的是哪一个,对吧。
标签: c++ pointers operator-overloading