将成员访问运算符与重载调用运算符相结合
Combining member access operators with overloaded call operator
给定一个 class Foo
重载 Boo* operator()(unsigned int)
,应该如何访问重载运算符?
我最初尝试过
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)
更冗长(并且使它更短更简洁是我首先重载运算符的原因)。
有没有不用使用 *
运算符来获取指针基值的方法?
不,您必须取消引用指针才能访问该对象;所以调用操作员的唯一方法是
(*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);
除此之外,我认为 Mike Seymour 是正确的,您无法执行其他任何操作来调用 operator()
。
给定一个 class Foo
重载 Boo* operator()(unsigned int)
,应该如何访问重载运算符?
我最初尝试过
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)
更冗长(并且使它更短更简洁是我首先重载运算符的原因)。
有没有不用使用 *
运算符来获取指针基值的方法?
不,您必须取消引用指针才能访问该对象;所以调用操作员的唯一方法是
(*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);
除此之外,我认为 Mike Seymour 是正确的,您无法执行其他任何操作来调用 operator()
。