繁体   English   中英

静态成员函数中包含类的C ++类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM