条件C ++类成员定义

时间:2019-09-13 13:37:07

标签: c++ class

我想根据C ++类中的模板参数定义类的两个变体。 (我正在使用C ++ 17。)

例如,如果模板参数bool flag为true,我希望该类具有一个成员:

Class1 foo;

,如果flag为假

Class2 bar;

类定义也会有一些逻辑变化,并使用foobar。我可以使用继承来实现,但是我正在探索是否还有另一种方法。看来https://en.cppreference.com/w/cpp/types/conditional可能会有所帮助,但我不确定。我也可以同时拥有两个成员,并在任何给定的对象中使用其中一个成员,但这似乎很浪费,而且必须有更好的方法。请注意,如果特定的解决方案仅允许我换出类而不是名称(也许带有条件?),则我不一定需要用不同的方式命名成员。

1 个答案:

答案 0 :(得分:3)

如果两个版本都可以使用相同的成员名称,那就太简单了:

template <bool flag>
struct Foo {
    std::conditional_t<flag, Class1, Class2> foo;
};