当您使用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>(); }
}
那么,这种可能性是否曾被考虑过?有没有理由让开发人员或编译器复杂化?
答案 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>(); }
// ^^^
};
或
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>(); }
};
如果您愿意。