Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件C++;类成员定义 我想根据C++类中的模板参数定义一个类的两个变体。(我正在使用C++17。)_C++_Class - Fatal编程技术网

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

条件C++;类成员定义 我想根据C++类中的模板参数定义一个类的两个变体。(我正在使用C++17。),c++,class,C++,Class,例如,如果模板参数bool flag为true,我希望该类有一个成员: Class1 foo; 如果标志为假 Class2 bar; 类定义也会有一些逻辑变化,并使用foo或bar。我可以使用继承来实现这一点,但我正在探索是否还有其他方法。这似乎有帮助,但我不确定。我也可以同时拥有两个成员,并在任何给定对象中使用其中一个,但这似乎是浪费,必须有更好的方法。请注意,如果某个特定的解决方案只允许我交换类,而不允许交换名称(可能使用条件?),那么我不一定需要对成员进行不同的命名 如果您可以在两个版

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

Class1 foo;
如果
标志
为假

Class2 bar;

类定义也会有一些逻辑变化,并使用
foo
bar
。我可以使用继承来实现这一点,但我正在探索是否还有其他方法。这似乎有帮助,但我不确定。我也可以同时拥有两个成员,并在任何给定对象中使用其中一个,但这似乎是浪费,必须有更好的方法。请注意,如果某个特定的解决方案只允许我交换类,而不允许交换名称(可能使用条件?),那么我不一定需要对成员进行不同的命名

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

template <bool flag>
struct Foo {
    std::conditional_t<flag, Class1, Class2> foo;
};
模板
结构Foo{
std::有条件的\u t foo;
};

您可以使用模板专业化。当您描述解决方案并寻求帮助时,该解决方案实际应该解决什么问题?最初的问题是什么?为什么需要根据
bool
模板使用不同的成员?也许还有其他解决方案?为什么不提供
Class1
Class2
作为模板参数呢?为什么需要为成员变量使用不同的名称?
Class1
Class2
是否有相同或相似的接口?
Class1
Class2
是否有任何关联?OP如何调用(或构造)该成员对象并将其传递给bool?@KhalilKhalaf该成员不需要bool,它将属于这两种类型。这两种类型只需要有相同的接口,在duck类型的意义上。我仍然不知道如何使用它,我从未见过它。因此,如果一个局外人创建了boss类的实例,那么他们在哪里传递条件
标志
?boss类如何知道访问foo.
Class1
stuff还是foo.
Class2
stuff?@KhalilKhalaf我认为这类似于
newfoo()
newfoo()
@Kulluk007
struct empty{};)