这在静态成员函数的未评估上下文中

时间:2017-09-07 05:24:39

标签: c++ c++14 c++17 static-members static-functions

为什么静态成员函数中未评估的上下文中不允许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

1 个答案:

答案 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;
};