首页 > 解决方案 > 条件 C++ 类成员定义

问题描述

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

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

Class1 foo;

如果flag如果为假

Class2 bar;

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

标签: c++class

解决方案


如果您可以为两个版本使用相同的成员名称,那么这很简单:

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

推荐阅读