C++ 如何将模板转换运算符转换为指向成员函数语法的指针
我在查看时看到了这个转换操作符(nullptr\t的成员): 使用上面的模板,没有输入参数。我不知道在这种情况下,类型推断是如何工作的。我很难形成一个特定的问题,除了,这是如何工作的?如果我有这样的代码: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。浮动会发生什么情况?这是指向成员的指针,不一定是指向成员函数的指针。区别在于它可以生成指向成员函数的指针或指向非函数成
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'; }