Я использую Functor Loki какое-то время, и недавно я спросил об этом question (все еще без ответа ...) Мне сказали использовать функцию std :: function, но я предпочитаю реализацию Loki из Functor, так как он также работает со всеми видами указателей в качестве параметров (например, std :: shared_ptr).std :: function и shared_ptr
struct Toto
{
void foo(int param)
{
std::cout << "foo: " << param << std::endl;
}
};
int
main(int argc, const char** argv)
{
std::shared_ptr<Toto> ptr = std::make_shared<Toto>();
Loki::Functor<void, LOKI_TYPELIST_1(int)> func(ptr, &Toto::foo);
func(1);
}
Есть ли способ сделать это с помощью std :: function?
Я не думаю, что это работает с 'shared_ptr', и если бы это было так, это не переоценило бы указатель при каждом вызове. Кроме того, обратите внимание, что эти однострочные шрифты выполняют совершенно разные вещи: 'bind()' не возвращает 'std :: function'. – Potatoswatter
@Potatoswatter работает с 'shared_ptr'. Почему он должен переоценить? – ForEveR
Ах, я пропустил тонкость концепции INVOKE. В действительности это делает копию и разыгрывания каждый раз. Я думал о конверсии. Тем не менее, обратите внимание, что 'auto' сохраняет статически-отправленный объект привязки, а не динамически отправленную' std :: function', и это совершенно разные вещи. – Potatoswatter