为什么没有'this_class' - 静态等价于'this'?

时间:2016-04-23 08:04:09

标签: c++ reflection static this

当您使用C ++非静态方法时,可以使用this变量来引用当前实例;通过实例你也有类型。在静态方法中,我希望我可以使用类似this_class类型的东西,这是我正在实现该方法的类的类型。即使它不是继承的(即class B : public A,方法A::foo()即使通过this_class访问,A也会B - 它仍然有用,例如,当您在具有许多模板参数的类中实现静态方法时,您希望调用类类型上模板化的一些类外函数。

使用说明:

template <typename T> void foo() { std::cout << typeid(T).name(); }

template <typename S, typename T, typename U, typename AndLots, typename More>
class A {
    /* ... */
    static void say_my_name( foo<this_class>(); }
}

那么,这种可能性是否曾被考虑过?有没有理由让开发人员或编译器复杂化?

1 个答案:

答案 0 :(得分:1)

  

怎么没有&#39; this_class&#39; - 静态等效于&#39;此&#39;?

你不需要它,因为它是微不足道的。

你可以写

template <typename S, typename T, typename U, typename AndLots, typename More>
class A {
    public:
    /* ... */
    static void say_my_name() { foo<A>(); }
                                // ^^^
};

Demo

template <typename S, typename T, typename U, typename AndLots, typename More>
class A {
    public:
    /* ... */
    typedef A<S,T,U,AndLots,More> this_type;

    static void say_my_name() { foo<this_type>(); }
};

Demo

如果您愿意。