我想根据C ++类中的模板参数定义类的两个变体。 (我正在使用C ++ 17。)
例如,如果模板参数bool flag
为true,我希望该类具有一个成员:
Class1 foo;
,如果flag
为假
Class2 bar;
类定义也会有一些逻辑变化,并使用foo
或bar
。我可以使用继承来实现,但是我正在探索是否还有另一种方法。看来https://en.cppreference.com/w/cpp/types/conditional可能会有所帮助,但我不确定。我也可以同时拥有两个成员,并在任何给定的对象中使用其中一个成员,但这似乎很浪费,而且必须有更好的方法。请注意,如果特定的解决方案仅允许我换出类而不是名称(也许带有条件?),则我不一定需要用不同的方式命名成员。
答案 0 :(得分:3)
如果两个版本都可以使用相同的成员名称,那就太简单了:
template <bool flag>
struct Foo {
std::conditional_t<flag, Class1, Class2> foo;
};