gpt4 book ai didi

c++ - 基于标志的多重继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:01 26 4
gpt4 key购买 nike

我有几个类,比如 A , B , 和 C , 和相应的标志 HAS_A=1 , HAS_B=2 , 和 HAS_C=4 .是否可以编写一个类,使其父类(来自 ABC)由这些标志的组合决定?

例子:

ParentsFromFlags<HAS_A | HAS_C> x;
// x ends up having the features of A and C

我知道我可以有可变的多个 parent <typename... Parents> , 但我喜欢这个因为我想确保如果 A , B , 和 C是类(class)的 parent ,他们总是会以一定的顺序出现。

最佳答案

这样做是为了在层次结构中引入一些额外的类......

enum ParentFlags { HAS_A = 1, HAS_B = 2, HAS_C = 4 };

class A{};
class B{};
class C{};

template <int M>
class ParentClass {};

template <>
class ParentClass<0>{};

template <>
class ParentClass<HAS_A> : public A {};

template <>
class ParentClass<HAS_B> : public B{};

template <>
class ParentClass<HAS_C> : public C{};

template <int F, int M>
class ParentTraits : public ParentClass<F & M>,
public ParentTraits<F & ~M, M << 1>
{};

template <int M>
class ParentTraits<0, M>
{};

template <int F>
class ParentFromFlags : public ParentTraits<F, 1>
{
};

int main()
{
ParentFromFlags<HAS_A | HAS_B> ab;
ParentFromFlags<HAS_A | HAS_C> ac;
ParentFromFlags<HAS_A | HAS_B | HAS_C> abc;
return 0;
}

关于c++ - 基于标志的多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849725/

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