汽车推断出的那种类型是什么?
what's that type deduced by auto?
在极少数情况下,我会想要显式声明变量?
那么F4的类型是什么?
下面的代码来自CPP首选项
#include <random>
#include <iostream>
#include <memory>
#include <functional>
struct Foo {
int data = 10;
};
int main()
{
using namespace std::placeholders; // for _1, _2, _3...
Foo foo;
auto f4 = std::bind(&Foo::data, _1); // bind to member data
std::cout << f4(foo) << 'n';
}
ps1:我想声明一个绑定到 C::m1、C::m2 的 std::bind 数组......
class C
{
string m1;
string m2;
};
PS2:decltype解决了我的问题,谢谢大家。
typedef decltype(std::bind(&C::m1, placeholders::_1)) Field;
Field foo[] =
{
std::bind(&C::m1, placeholders::_1);
std::bind(&C::m2, placeholders::_1);
}
如果需要声明与f4
类型匹配的内容,可以使用decltype(f4)
来指定类型:
decltype(f4) f5;
f4
的类型将是某种未指定的类型,从 std::bind 返回。您可以在编译器错误中查看它,例如使用 TD
.
template<typename>
struct TD;
// in main
TD<decltype(f4)> _;
注意:decltype
返回f4
的实际类型。
注意:std::bind
的结果可以分配给具有正确签名的std::function
。对于您的第一个示例,它将std::function<int(Foo&)>
以防
万一你想再次内省类型,有一个不错的库:Boost.TypeIndex,它会给你一个漂亮的类型。
对于叮当 3.4
type_id_with_cvr<decltype(f4)>().pretty_name()
是
std::_Bind<std::_Mem_fn<int Foo::*> (std::_Placeholder<1>)>
从
调用 std::bind
返回的类型未由标准指定。
每个实现都可以自由发明任何类型的工作。
相关文章:
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 类名后跟括号的类型是什么
- std::chrono::duration::count函数的实际结果类型是什么
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- 指向 2D 数组的指针的类型是什么?
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- 共享_ptr中多功能数组的类型是什么
- 构造函数的类型是什么?
- 字符串中单个字符作为数组的数据类型是什么
- 该结构继承的类型是什么
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- C 中被视为可可的类型是什么
- 当函数采用右值引用时,函数中该变量的类型是什么?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- 模板类中引用的引用的类型是什么
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 包含通过引用捕获的 lambda 函数的"variable"的类型是什么?
- 通过插座发送的内容的数据类型是什么