gpt4 book ai didi

C++ 静态成员函数中封闭类的类型

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:25 25 4
gpt4 key购买 nike

我认为这是完全不可能的,但万一呢。在任何版本的 C++ 中,是否有可能以某种方式在静态成员函数中获取封闭类的类型?

class Impossible {
public:
static void Fun()
{
typedef Impossible EnclosingClass;

// now do something with EnclosingClass ...
}
}

有没有办法在不在函数中写入类名的情况下获取封闭类的类型(在这种情况下不可能)?

我想这样做的原因是为了避免在函数中重复类名。如果发生这样的事情,很容易导致难以发现的复制粘贴错误:

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 ...
}
}

有没有什么好的方法可以防止这种事情的发生呢?我可以想象触摸在封闭类中声明为私有(private)的东西,但这将迫使我编写额外的代码(因为我当前的设计不包含任何固有的私有(private)成员,所有成员都是公共(public)的)。

最佳答案

问题是 C++ 缺少 self 关键字。

我通常写:

struct Foo
{
typedef Foo self;

static void bar()
{
self* ptr = nullptr;
}
};

我意识到您仍然需要确保 typedef 是正确的,但至少这样您可以将它放在类型定义的顶部,您会注意到它。

虽然有 hackery,you can make this entirely autonomous .

关于C++ 静态成员函数中封闭类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com