[英]C++ type of enclosing class in static member function
我认为这是完全不可能的,但是如果可以的话。 在任何版本的C ++中,是否都可能以某种方式获取静态成员函数中的封闭类的类型?
class Impossible {
public:
static void Fun()
{
typedef Impossible EnclosingClass;
// now do something with EnclosingClass ...
}
}
有没有一种方法可以获取封闭类的类型(在这种情况下是Impossible
)而无需在函数中编写类的名称?
我想这样做的原因是避免在函数中重复类名。 如果发生以下情况,很容易导致难以发现复制粘贴错误:
class SomeOther { // another class, with the same interface as Impossible
public:
static void Fun()
{
typedef Impossible EnclosingClass;
// whoops, copy-pasted, forgot to change "Impossible" to "SomeOther"
// now do something with EnclosingClass ...
}
}
有防止这种情况发生的好方法吗? 我可以想象碰到在封闭类中声明为私有的东西,但是那将迫使我编写额外的代码(因为我当前的设计不包含任何固有的私有成员,所以都是公共的)。
问题在于C ++缺少self
关键字。
我通常写:
struct Foo
{
typedef Foo self;
static void bar()
{
self* ptr = nullptr;
}
};
我意识到您仍然必须确保typedef
是正确的,但是至少以这种方式,您可以将其放在类型定义的顶部,在那里您会注意到它。
但是,有了黑客, 您就可以完全自主 。
C ++没有任何功能来获取当前类,名称空间等的名称。在C ++ 11中,您可以获取变量的类型,但首先需要该变量。 在这种情况下,您一无所有。
我喜欢尝试引入一些可以在不相关的类中引用的通用名称的想法; 为了可维护性。
我的第一种方法将是一种简单的方法:在封闭的类中提供typedef
。 在每个不相关的类中为typedef
赋予相同的名称。
class Impossible {
public:
typedef Impossible Enclosing;
static void Fun()
{
Enclosing* theObject = 0;
}
};
这样做也会产生效果-我称之为好处 -无法在您没有提供typedef
新不相关类中进行编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.