gpt4 book ai didi

c++ - tr1::function 和 tr1::bind

转载 作者:太空狗 更新时间:2023-10-29 19:46:30 26 4
gpt4 key购买 nike

我将以下内容放入 Ideone.com(和 codepad.org):

#include <iostream>
#include <string>
#include <tr1/functional>

struct A {
A(const std::string& n) : name_(n) {}
void printit(const std::string& s)
{
std::cout << name_ << " says " << s << std::endl;
}
private:
const std::string name_;
};

int main()
{
A a("Joe");
std::tr1::function<void(const std::string&)> f = std::tr1::bind(&A::printit, &a, _1);
a("Hi");
}

并得到这些错误:

prog.cpp: In function ‘int main()’:

prog.cpp:18: error: ‘_1’ was not declared in this scope

prog.cpp:19: error: no match for call to ‘(A)(const char [3])’

prog.cpp:18: warning: unused variable ‘f’

我这辈子都搞不清楚第 18 行出了什么问题。

最佳答案

两个错误:

  1. _1 在命名空间 std::tr1::placeholders 中定义。您需要 using namespace std::tr1::placeholders; within main(),或使用 std::tr1: :placeholders::_1

  2. 第 19 行应该是 f("Hi"),而不是 a("Hi")

#include <iostream>
#include <string>
#include <tr1/functional>

struct A {
A(const std::string& n) : name_(n) {}
void printit(const std::string& s)
{
std::cout << name_ << " says " << s << std::endl;
}
private:
const std::string name_;
};

int main()
{
using namespace std::tr1::placeholders; // <-------

A a("Joe");
std::tr1::function<void(const std::string&)> f = std::tr1::bind(&A::printit, &a, _1);
f("Hi"); // <---------
}

关于c++ - tr1::function 和 tr1::bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11250900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com