gpt4 book ai didi

c++ - 多态性:通过类字面量或对象访问静态成员

转载 作者:行者123 更新时间:2023-11-30 01:54:20 25 4
gpt4 key购买 nike

假设您需要通过类文字或该类的继承对象访问结构/类的成员。它可能看起来像这样:

struct Component {
static const long key = 0;
virtual long getKey() {return key;};
};

struct FooComponent : Component {
static const long key = 0x1;
virtual long getKey() {return key;};
};

struct BarComponent : Component {
static const long key = 0x2;
virtual long getKey() {return key;};
};

有了上面的内容,key 可以通过以下方式访问:

long key = FooComponent::key;

FooComponent foo;
long key = foo.getKey();

现在我的问题是:是否有一些更简洁、冗余更少的方法来实现上述目标?理想情况下,virtual long getKey() {return key;}; 只需指定一次,而不是为每个继承类指定一次。

编辑:

类层次结构很重要。这些组件存储在一个容器中,在我的例子中是一个 unordered_map:

std::unordered_map<long, std::unique_ptr<Component>> components;

最佳答案

扩展@iavr 对新要求的回答:

struct Component {
virtual ~Component() {}
virtual long getKey() { return 0; }
};

template <int Key>
struct KeyedComponent : Component {
long getKey() { return Key; };
};

struct FooComponent : KeyedComponent<1> { };
struct BarComponent : KeyedComponent<2> { };

测试:

std::vector<std::unique_ptr<Component>> components;
components.emplace_back(new FooComponent());
components.emplace_back(new BarComponent());

for (auto& component : components) {
std::cout << component->getKey() << std::endl;
}

打印:

1
2

关于c++ - 多态性:通过类字面量或对象访问静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180971/

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