如何从子项 B 创建子项 A 并转换为父级?
how to create child A from child B and cast to Parent?
上下文:我想利用程序中的状态对象来确定程序在状态期间的运行方式。我有一个抽象类State
每个状态都派生自(为了简单起见,假设我们有MenuState
和AboutState
(,当前状态存储为State类型。
我希望能够从MenuState
中创建一个新的AboutState
实例,反之亦然,以便我可以控制当前处于的程序状态并轻松更改状态(这将返回一个 State 对象,因为这就是我当前的状态类型(
我遇到的问题显然是,如果我首先创建AboutState
,MenuState
尚不存在(对编译器而言(并在编译时崩溃。我想通过向前声明MenuState
来解决这个问题,但我无法在函数中强制MenuState
,因为我只是向前声明它而不是创建一个完整的类。
本质上,我如何转发声明/修复此循环引用问题,以便我可以从另一个对象创建每个对象?
我主要使用 Java,所以请原谅下面的明显错误,但你明白了,即使我转发声明,我也不能投temp
->IWorldState
。(我认为(
class AboutState : public IWorldState
{
public:
AboutState() {};
virtual IWorldState* handleInput(std::string input) {
MainMenuState temp;
*IWorldState state = (IWorldState)temp;
return state;
}
};
class MainMenuState : public IWorldState
{
public:
MainMenuState() {};
virtual IWorldState* handleInput(std::string input) {
AboutState temp;
*IWorldState state = (IWorldState)temp;
return state;
}
};
也不知道是否可以在同一个问题中提问,但是是否有更合适的方法来对对象执行这种功能,或者是否有不同类型的方法在不同状态之间移动?我考虑过在开始时创建所有状态并将下一个状态作为参数传递给构造函数的想法,但我觉得如果我能让它工作,那就没有必要了。
您必须从定义中拆分(转发(声明:
class IWorldState
{
public:
virtual ~IWorldState() = default;
virtual std::unique_ptr<IWorldState> handleInput(std::string input) = 0;
};
class AboutState : public IWorldState
{
public:
AboutState() = default;
std::unique_ptr<IWorldState> handleInput(std::string input) override;
};
class MainMenuState : public IWorldState
{
public:
MainMenuState() = default
std::unique_ptr<IWorldState> handleInput(std::string input) override
};
// in cpp, else add inline
std::unique_ptr<IWorldState> AboutState::handleInput(std::string input) {
return std::make_unique<MainMenuState>();
}
std::unique_ptr<IWorldState> MainMenuState::handleInput(std::string input) {
return std::make_unique<AboutState>();
}
相关文章:
- C++使用params创建线程函数会导致转换错误
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 从转换后的容器元素创建离散分布
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 从c++11 time_t创建一个可转换为.net DateTime的字符串
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何从子项 B 创建子项 A 并转换为父级?
- C++ 异常从字符串转换为c_str会创建垃圾字符
- QT 创建器只会将第一个单词从文本编辑转换为纯文本
- 将使用基类 Ctor创建的对象转换为派生类
- Qt 创建器中的实用程序::转换::to_string_t中的链接错误
- 创建可相互转换的模板类系列
- 我创建了一个将雷亚尔转换为美元的程序,但浮点变量不正确
- 创建一个将Centigrade转换为Wahrenheit的课程,反之亦然
- 尝试使用堆栈创建队列.为什么我会遇到int转换错误的空白
- 通过强制转换创建子数组引用
- 通过重新解释强制转换创建无效引用
- 通过构造函数进行隐式类类型转换创建的临时对象何时被销毁