Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将模板转换运算符转换为指向成员函数语法的指针_C++_Templates_Pointer To Member_Nullptr - Fatal编程技术网

C++ 如何将模板转换运算符转换为指向成员函数语法的指针

C++ 如何将模板转换运算符转换为指向成员函数语法的指针,c++,templates,pointer-to-member,nullptr,C++,Templates,Pointer To Member,Nullptr,我在查看时看到了这个转换操作符(nullptr\t的成员): 使用上面的模板,没有输入参数。我不知道在这种情况下,类型推断是如何工作的。我很难形成一个特定的问题,除了,这是如何工作的?如果我有这样的代码: typedef int (MyClass::*MyTypedef)(float); MyTypedef m = nullptr; 我猜T推断为int,C推断为MyClass。浮动会发生什么情况?这是指向成员的指针,不一定是指向成员函数的指针。区别在于它可以生成指向成员函数的指针或指向非函数成

我在查看时看到了这个转换操作符(nullptr\t的成员):

使用上面的模板,没有输入参数。我不知道在这种情况下,类型推断是如何工作的。我很难形成一个特定的问题,除了,这是如何工作的?如果我有这样的代码:

typedef int (MyClass::*MyTypedef)(float);
MyTypedef m = nullptr;
我猜T推断为int,C推断为MyClass。浮动会发生什么情况?

这是指向成员的指针,不一定是指向成员函数的指针。区别在于它可以生成指向成员函数的指针或指向非函数成员的指针

现在在特定的用例中,目标是一个指向成员的指针,编译器看到一个表达式,其中它需要一个
int(MyClass::*)(float)
,另一方面它有一个
nullptr
。它试图找到一个转换,并找到
运算符tc::*()
,如果
C
被推导出为
MyClass
,而
T
被推导出为
int(float)
[函数接受
float
并返回
int
],则这是一个有效的转换

我还发现该语言的这一特定角落有点令人困惑(有typedef,或函数的推断类型),例如,如果奇怪,这是合法的:

typedef void int\u f(int);
结构X{
国际货币基金组织;
};

void X::m(int X){std::cout如果将类型解析为其组成部分,则替换更有意义。
tc:*[指向类型[T]的C类成员的指针]
其中
[T]
被替换为
T(P)[函数接受P并返回[T]]
导致
T(C:*)(P)[指向类型C类成员的指针][函数获取P并返回[T]]]
。请参阅
R (C::*)(I1, I2, ...)
typedef int (MyClass::*MyTypedef)(float);
MyTypedef m = nullptr;
typedef void int_f(int);
struct X {
   int_f m;
};
void X::m(int x) { std::cout << x << '\n'; }