C++ 组合成员访问运算符和重载调用运算符

C++ 组合成员访问运算符和重载调用运算符,c++,pointers,operator-overloading,C++,Pointers,Operator Overloading,给定一个带有重载Boo*运算符()(unsigned int)的类Foo,如何访问重载运算符 我最初试过 std::unique_ptr<Foo> foo_ptr(new Foo); Boo* boo_ptr = foo_ptr(1); std::unique_ptr foo_ptr(新foo); Boo*Boo_ptr=foo_ptr(1); 但这不起作用,所以我试着: std::unique_ptr<Foo> foo_ptr(new Foo); Boo* boo_

给定一个带有重载
Boo*运算符()(unsigned int)
的类
Foo
,如何访问重载运算符

我最初试过

std::unique_ptr<Foo> foo_ptr(new Foo);
Boo* boo_ptr = foo_ptr(1);
std::unique_ptr foo_ptr(新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_ptr(新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_ptr(新foo);
Boo*Boo_ptr=(*foo_ptr)(1);
这比在
Foo
中声明一个方法更冗长,比如
ByIndex(unsigned int)
(让它更简短是我首先重载操作符的原因)


有没有一种方法不必使用
*
操作符来获取指针的基值就可以做到这一点?

没有,您必须取消引用指针才能访问对象;所以打电话给接线员的唯一方法是

(*foo_ptr)(1)
foo_ptr->operator()(1);

不,您必须取消引用指针才能访问对象;所以打电话给接线员的唯一方法是

(*foo_ptr)(1)
foo_ptr->operator()(1);

一种方法是引用:

std::unique_ptr<Foo> foo_ptr(new Foo);
Foo& foo_ref = *foo_ptr;

Boo* boo_ptr = foo_ref(1);
std::unique_ptr foo_ptr(新foo);
Foo&Foo_ref=*Foo_ptr;
Boo*Boo_ptr=foo_ref(1);

除此之外,我认为Mike Seymour是正确的,调用
operator()

的方法之一是引用:

std::unique_ptr<Foo> foo_ptr(new Foo);
Foo& foo_ref = *foo_ptr;

Boo* boo_ptr = foo_ref(1);
std::unique_ptr foo_ptr(新foo);
Foo&Foo_ref=*Foo_ptr;
Boo*Boo_ptr=foo_ref(1);

除此之外,我认为Mike Seymour是正确的,没有其他方法可以调用
operator()

我的代码中没有实际的内容-我只是在这里的示例中强调我从pointer@Columbo显然,他没有通读整个过程。那我真的不明白这个问题。“有没有一种方法可以不使用
*
”就从指针获取对象?@Columbo将
new
的用法改为
std::unique_ptr
,这就是我在那里的代码中实际使用的用法。我只是第一次没有为这个问题操心,因为它根本不影响这个问题。为什么人们对这个问题投那么多的反对票?这个问题问得不好,对于那些不太熟悉C++内部工作的人来说,这是一个有效的问题。不幸的是,人们对此投了反对票,甚至没有说明为什么应该投反对票(这对于OP能够改进很重要!)+1从我这里。@k这两者有区别。智能指针可能会过载
operator()
<代码>唯一性\u ptr没有,但我们不知道您使用的是哪一个,对吗?我的代码中实际上没有-我只是在这里的示例中强调我从一个pointer@Columbo显然,他没有通读整个过程。那我真的不明白这个问题。“有没有一种方法可以不使用
*
”就从指针获取对象?@Columbo将
new
的用法改为
std::unique_ptr
,这就是我在那里的代码中实际使用的用法。我只是第一次没有为这个问题操心,因为它根本不影响这个问题。为什么人们对这个问题投那么多的反对票?这个问题问得不好,对于那些不太熟悉C++内部工作的人来说,这是一个有效的问题。不幸的是,人们对此投了反对票,甚至没有说明为什么应该投反对票(这对于OP能够改进很重要!)+1从我这里。@k这两者有区别。智能指针可能会过载
operator()
unique\u ptr
没有,但我们不知道您使用哪一个,对吗?谢谢,我很困惑为什么我不能让它与
->
一起使用。我没有意识到它前面需要有
操作员
谢谢,我不明白为什么我不能让它与
->
一起工作。我没有意识到它前面需要加上
运算符
我没有想到这一点,但我想这个方法会像声明成员函数一样冗长,而不是重载paradensis运算符我没有想到这一点,但是我想这个方法和声明一个成员函数一样冗长,而不是重载paranthesis操作符