- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一些操作...查看、编辑、 checkout 等。业务逻辑规定,如果文档已经 checkout ,则所有 View 都会变成编辑。
有没有一种简洁的 OO 方法来做这样的事情:
class Action
{
public:
Document document;
virtual void execute();
};
class View, Edit, Checkout : public Action;
View::execute()
{
if (document.isCheckedOut)
{
delete this;
this = new Edit;
this->execute();
}
/* execute view */
}
更新:你们怎么看这个:
class Action
{
public:
static int type;
Document document;
virtual void execute();
static Action* construct(int type, Document document) = 0;
private:
Action();
};
class View, Edit: public Action;
Action* View::construct(Document document)
{
if (document.isCheckedOut)
return new Edit(document);
return new View(document);
}
Action* Edit::construct(Document document)
{
return new Edit(document);
}
void onViewButton(Document document)
{
Action *action = View::construct(document);
action->execute();
delete action;
}
最佳答案
没有办法像那样重新分配“this”指针。您可以使用智能指针实现来通过添加一个间接层来执行类似的操作。
class action_ptr
{
Action* m_Data;
public:
action_ptr(Action* value)
{
m_Data = value;
}
Action* operator->()
{
if(m_Data->isView() && m_Data->isCheckedOut())
{
delete m_Data;
m_Data = new Edit();
}
return m_Data;
}
};
// usage
action_ptr pAction(new View());
pAction->DoViewStuff();
pAction->Checkout();
pAction->OtherStuff(); // If isCheckedOut returned true, this now magically operates on an Edit instead!
这绝不是一个完整的实现,只是一个示例 - 存在内存泄漏和许多缺失的功能。
关于c++ - 实例与新实例热交换自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3453826/
我有一个Scala服务器应用程序,该应用程序使用gradle以及scala和application插件进行构建和运行。我使用gradle run启动应用程序。 我的 Gradle 的一部分。一个典型的
有时一些开发人员从 IntellijIdea (Ctrl+Shift+F9) 执行热交换,我们有一个启用了调试端口的公共(public)服务器他们在 IntelliJ Idea 中进行调试。我有两个问
我一直在开发一个基于 Java 的小型在线游戏,虽然还没有完成,但我想在某个时候发布它。我不认为它很快就会完成,但是,所缺少的只是一些继续的故事部分。我考虑过通过互联网连接将更新修补到游戏中(就像大多
Akka 1.1.3 文档指出“become 方法对于许多不同的事情都很有用,但它的一个特别好的例子是它用于实现有限状态机 (FSM) 的示例”。在运行时热交换 Akka actor 的实现还有哪些其
我正在尝试找出如何在使用我的构建系统进行调试时启用代码的热交换,但我很快就干涸了。 我有一个带有调试目标的 Ant 构建,如下所示:
我已经更新了最新版本的 android studio (2.1)。文档中提到,android studio 最新版本将在 android studio 的即时运行功能中支持冷热交换。 谁能告诉我热交换
我正在寻找支持(Visual Studio 的)编辑并继续类似功能的 IDE。我知道 Netbeans 有它用于 Java(称为热交换、修复并继续),但找不到任何关于 Linux 系统的 C/C++
我是 IntelliJ 的新手,我正在使用它来开发 AngularJS/Java 网络应用程序。当我更改 HTML 或 JavaScript 代码时,我总是必须重新启动应用程序服务器(我使用的是 Je
我没有 JRebel。我希望有解决方案,无需购买 JRebel。 最佳答案 您可以就地编辑 xhtml 文件(例如,在它运行的位置 - 通常是开发环境的构建区域),它将在下次刷新时更新。 我们有一个
我是一名优秀的程序员,十分优秀!