为什么静态成员函数中未评估的上下文中不允许this
?
struct A
{
void f() {}
static void callback(void * self) // passed to C function
{
static_cast< decltype(this) >(self)->f();
}
};
此代码出错:
错误:'this'不适用于静态成员函数
static_cast< decltype(this) >(self)->f(); ^~~~
decltype(this)
需要简洁(有时它会更短,然后是VeryVeryLongClassName *
),另一个优点是意图更清晰。
什么标准说明在静态成员函数中的未评估上下文中使用this
?
答案 0 :(得分:5)
我不知道this
在未评估的上下文中出现的重要性,您在静态成员函数中引用doesn't exist的内容,编译器如何?应该在这种情况下推断出this
的类型?
作为必然结果,非静态成员函数中的type of this
依赖于所述成员函数的cv限定符,如果成员函数为{decltype(this)
,则T const*
将产生const
{1}},如果不是T *
,则{1}}。因此,类型取决于表达式的上下文。在您的示例中,上下文没有this
指针。
为了减轻必须为类命名的痛苦,您可以为其添加别名。
class VeryVeryLongClassName
{
using self = VeryVeryLongClassName;
};