C + + 缺乏相当于 PHP 的 self
关键字,计算结果为封闭类的类型。
在每个班级的基础上伪造它是很容易的:
struct Foo
{
typedef Foo self;
};
但是我不得不再次写 Foo
。也许有一天我会写错,导致一个无声的错误。
我可以使用一些 decltype
和朋友的组合,使这项工作“自主”?但是 this
在那个地方是无效的:
struct Foo
{
typedef decltype(*this) self;
};
// main.cpp:3:22: error: invalid use of 'this' at top level
// typedef decltype(*this) self;
(我不会担心 static
的等效性,它也是如此,只是具有后期绑定。)