gpt4 book ai didi

c++ - C++函数中局部类的使用

转载 作者:IT老高 更新时间:2023-10-28 12:34:36 25 4
gpt4 key购买 nike

我在 c++ 函数中看到了一些内部结构的用法。

有一个通用接口(interface)IBase。这是草稿代码。

class IBase
{
virtual Method()=0;
}

vector<IBase*> baseList;

然后一个函数根据那个IBase定义了一个内部类,然后将内部类对象push到baseList中。

void func()
{
struct Object : public IBase
{
virtual Method()
{
// Method of Object in func
}
}

IBase* base = new Object();
baseList->push(base);

}

这似乎是一种奇怪的用法,但却是消息/事件创建模式的一个很好的实现。

其他线程可能会使用这个 baseList 来处理传入的事件。

“struct Object”的内部结构的范围是什么?这很有趣。是否有一些文件在谈论这个?

最佳答案

What's the scope of internal struct of "struct Object"?

本地类的范围是定义它们的函数。但这本身并不有趣。

本地类的有趣之处在于 如果 它们实现了某个接口(interface)(就像您的代码那样),那么您可以创建它的实例(使用 new )并返回它们(例如,作为std::vector<IBase*> ),从而使实现即使在函数之外也可以通过基类指针访问

关于本地类的一些其他事实:

  • 他们不能定义静态成员变量。

  • 他们不能访问封闭函数的非静态“自动”局部变量。但他们可以访问static变量。

  • 它们可以用在模板函数中。

  • 如果它们是在模板函数中定义的,那么它们可以使用封闭函数的模板参数。

  • 本地类是最终的,这意味着函数之外的用户不能从本地类派生到函数。如果没有本地类,您必须在单独的翻译单元中添加一个未命名的命名空间。

  • 本地类用于创建trampoline functions通常称为thunks


编辑

标准 (2003) 中的一些引用资料

9.8 本地类声明 [class.local]

\1. A class can be defined within a function definition; such a class is called a local class. The name of a local class is local to its enclosing scope. The local class is in the scope of the enclosing scope, and has the same access to names outside the function as does the enclosing function. Declarations in a local class can use only type names, static variables, extern variables and functions, and enumerators from the enclosing scope.

[Example:

int x;
void f()
{
static int s ;
int x;
extern int g();

struct local {
int g() { return x; } // error: x is auto
int h() { return s; } // OK
int k() { return ::x; } // OK
int l() { return g(); } // OK
};
// ...
}
local* p = 0; // error: local not in scope

—end example]

\2. An enclosing function has no special access to members of the local class; it obeys the usual access rules (clause 11). Member functions of a local class shall be defined within their class definition, if they are defined at all.

\3. If class X is a local class a nested class Y may be declared in class X and later defined in the definition of class X or be later defined in the same scope as the definition of class X. A class nested within a local class is a local class.

\4. A local class shall not have static data members.

关于c++ - C++函数中局部类的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714616/

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