Pouton coroutines являются синтаксическим сахаром для генераторов, с некоторыми дополнительными ограничениями в их поведении (так что их назначение явно отличается и не смешивается). Вы не можете сделать:
next(foo())
TypeError: 'coroutine' object is not an iterator
, потому что он отключен явно. Однако вы можете сделать:
foo().send(None)
Hello
Hello
Hello
...
, что эквивалентно next()
для генератора.
Вы хотите следующее:
typedef void (K::*MemFuncType)() const;
Если вы хотите по-прежнему основывать MemFuncType
на FuncType
, вам необходимо изменить FuncType
:
typedef void FuncType() const;
typedef FuncType K::* MemFuncType;
Другой более прямой способ сделать это (предотвращение using
и typedef
с - это:
#include <iostream>
class Object
{
int i_;
public:
int j_;
Object()
: Object(0,0)
{}
Object(int i, int j)
: i_(i),
j_(j)
{}
void printIplusJplusArgConst(int arg) const
{
std::cout << i_ + j_ + arg << '\n';
}
};
int main(void)
{
void (Object::*mpc)(int) const = &Object::printIplusJplusArgConst;
Object o{1,2};
(o.*mpc)(3); // prints 6
return 0;
}
mpc
указатель метода константы на Object
.