C++11的占位符std::placeholders
2016-08-09 17:02
417 查看
参考了博客http://m.blog.csdn.net/article/details?id=50471709,感谢原作者。
1. std::placeholders
C++11的新特性:占位符std::placeholders,其定义如下:
其中_1, _2, _3是未指定的数字对象,用于function的bind中。 _1用于代替回调函数中的第一个参数, _2用于代替回调函数中的第二个参数,以此类推。使用的例子如下:
2. std::is_placeholder
std::is_placeholder 用于判断T是否为占位符,它有一个成员变量value。如果T是placeholder类型,value的值为1代表 _1,2代表 _2;如果T不是,则value为0。示例如下:
3. std::is_bind_expression
判断是否是bind表达式,有value成员,返回值是true或false,其示例如下:
1. std::placeholders
C++11的新特性:占位符std::placeholders,其定义如下:
namespace placeholders { extern /* unspecified */ _1; extern /* unspecified */ _2; extern /* unspecified */ _3; // ... }
其中_1, _2, _3是未指定的数字对象,用于function的bind中。 _1用于代替回调函数中的第一个参数, _2用于代替回调函数中的第二个参数,以此类推。使用的例子如下:
#include <functional> #include <string> #include <iostream> void goodbye(const std::string& s) { std::cout << "Goodbye " << s << '\n'; } class Object { public: void hello(const std::string& s) { std::cout << "Hello " << s << '\n'; } }; int main(int argc, char* argv[]) { typedef std::function<void(const std::string&)> ExampleFunction; Object instance; std::string str("World"); ExampleFunction f = std::bind(&Object::hello, &instance, std::placeholders::_1); // equivalent to instance.hello(str) f(str); f = std::bind(&goodbye, std::placeholders::_1); // equivalent to goodbye(str) f(str); return 0; }
2. std::is_placeholder
std::is_placeholder 用于判断T是否为占位符,它有一个成员变量value。如果T是placeholder类型,value的值为1代表 _1,2代表 _2;如果T不是,则value为0。示例如下:
#include <iostream> // std::cout, std::boolalpha #include <functional> // std::is_placeholder, std::placeholders int main () { using namespace std::placeholders; // introduces _1 std::cout << std::is_placeholder<decltype(_1)>::value << '\n'; std::cout << std::is_placeholder<decltype(_2)>::value << '\n'; std::cout << std::is_placeholder<int>::value << '\n'; return 0; } //输出: 1 2 0
3. std::is_bind_expression
判断是否是bind表达式,有value成员,返回值是true或false,其示例如下:
#include <iostream> // std::cout, std::boolalpha #include <functional> // std::bind, std::plus, std::placeholders, std::is_bind_expression int main () { using namespace std::placeholders; // introduces _1 auto increase_int = std::bind (std::plus<int>(),_1,1); std::cout << std::boolalpha; std::cout << std::is_bind_expression<decltype(increase_int)>::value << '\n'; return 0; } //输出 true
相关文章推荐
- C++ bitset类的使用与简介
- C语言基本教程 第2课: 编译环境的搭建
- C++虚函数(1)
- UVA 548-Tree
- 8.9指针重点
- C++运算符重载
- C++ 窄字符转换为宽字符
- C语言 条件判断详细介绍
- C++拷贝构造函数、赋值运算符重载函数使用总结
- C语言中变量的存储方式
- C++如何实现只能动态分配类对象,不能定义类对象
- 377. Combination Sum IV
- C++中宏##(两个井号)和#(一个井号)用法
- 导出 C++ 函数模块给 Python3 调用
- C++:简单的继承理解
- C语言 运算符详细介绍及示例代码
- ModBus从站与ABB的FreeLance系统RTOM模块通讯方案
- POJ 2240(水题 条件改变的 floyd 算法)
- 图的广度优先搜索遍历(邻接表&邻接矩阵)(C++)
- c++ 函数指针作为返回值,链式编程