gpt4 book ai didi

c++ - 可以在类外使用类中定义的名称吗?

转载 作者:行者123 更新时间:2023-12-01 23:04:02 25 4
gpt4 key购买 nike

我想隐藏实际的结构,但为用户提供接口(interface)名称。

所以我的代码是:

class A
{
private:
struct B{...};
public:
using BPtr = B*;
B* funct(){...};
}

我的用法是

A a;
BPtr p = a.funct();

最佳答案

全名是A::BPtr,所以这会起作用:

A::BPtr p = a.funct();

另一方面,这是毫无意义的,因为只有名称“B”是私有(private)的——类定义不是。

例如,

class A
{
private:
struct B{ int x = 1234; } b;
public:
using BPtr = B*;
B* funct(){ return &b; };
};

int main() {
A a;
A::BPtr b = a.funct();
std::cout << b->x << std::endl;
}

输出“1234”,也是如此

class A
{
private:
struct B{ int x = 1234; } b;
public:
B funct(){ return b; };
};

int main() {
A a;
std::cout << a.funct().x << std::endl;
}

尽管 A::B b = a.funct(); 不会编译(但 auto b = a.funct() 会)。

经验教训:如果你递给某人一件东西,他们可以使用它 - 即使他们不知道如何调用它。

关于c++ - 可以在类外使用类中定义的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71319788/

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