有限状态机通常被认为是OOP中的糟糕设计吗?
我听到了很多.并且,在我不得不使用一个非常古老的,没有文档的C++片段之后,我倾向于同意.调试很痛苦.
可读性/可维护性问题呢?
我正在开发一个有一些"模块"的项目.我在这里称之为模块的是一个简单的类,它实现了一个特定的功能,并从一个强制接口的抽象类GenericModule派生.
应该在将来添加新模块.
可以同时加载模块的多个实例,也可以不加载,具体取决于配置文件.
我认为,如果未来的开发人员能够在一个简单的行中"注册"他的模块系统就会很棒.或多或少与他们在谷歌测试中注册测试的方式相同.
我正在使用visual studio 2005构建项目.代码完全在库中,除了exec项目中的main().我想保持这种方式.
我在谷歌测试中找到了灵感.
我创建了一个模板化的工厂.看起来或多或少像这样(我跳过了不感兴趣的部分,以保持这个问题有点可读):
class CModuleFactory : boost::noncopyable
{
public:
virtual ~CModuleFactory() {};
virtual CModuleGenerique* operator()(
const boost::property_tree::ptree& rParametres ) const = 0;
};
template <class T>
class CModuleFactoryImpl : public CModuleFactory
{
public:
CModuleGenerique* operator()(
const boost::property_tree::ptree& rParametres ) const
{
return new T( rParametres );
}
};
Run Code Online (Sandbox Code Playgroud)
和一个应该注册模块并将其工厂添加到列表的方法.
class CGenericModule
{
// ...
template <class T>
static int declareModule( const std::string& rstrModuleName )
{
// creation de la factory
CModuleFactoryImpl<T>* …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个小项目,涉及创建一个控制台程序,该程序旨在由更大的产品在后台运行.
该程序一方面可以与主要产品(IP21)通信,另一方面可以作为服务器,处理多个客户端.
我已经开始研究架构,并提出了一些基于反应堆处理事件的东西,例如主产品生成的连接或事件.客户端处理部分由单独的线程处理,每个客户端一个.
但我不同意我的同事关于这种架构.他说我应该把反应堆和少数其他组件放在主线程中,在一个单独的线程中.主线程应该尽可能简单.我这样做,以便程序不会崩溃,如果这部分.他说,拥有一个完全无功能的程序比暴力崩溃更好.
我说快失败最好.如果程序中的这个(关键)部分崩溃,则没有理由尝试保持它活着.而且我相信这会给用户带来麻烦; 他会注意到有些问题,但如果他查看任务列表(我们的产品作为某种任务管理器列出了应该运行的任务并允许轻松跟踪崩溃的任务),他将不会注意到该程序崩溃了!
我希望你可以通过向一方或另一方提出一些论据来帮助我们;)
编辑:感谢您的回答,但我们不同意的是将反应堆和其他一些组件放在一个单独的线程中,以防出现严重的编程相关问题(一个段错误/死锁/ <插入严重问题>).我认为让程序在没有这个线程的情况下运行既危险也没有意义.
我目前正在尝试以更好的方式组织我的代码.
为此,我使用了名称空间,按组件对类进行分组,每个组都有一个已定义的角色和一些接口(实际上是抽象类).
我发现它非常好,特别是当我不得不重写整个组件时,我对其他组件几乎没有影响.(我相信使用一堆混合类和方法会更加困难)
然而,我并不是百分之百满意.特别是我想在接口,组件的公共面以及后面的实现之间做更好的分离.我认为组件本身的"接口"应该更清晰,我的意思是新来者应该很容易理解他必须实现什么接口,他可以使用什么接口以及实现的哪些部分.
很快,我将开始一个涉及多达5个开发人员的更大项目,我想在这一点上明白我的想法.
那你呢?你怎么做呢?你如何组织你的代码?
我需要在我们的系统中gprof一个库来检查函数调用,看看我们是否可以再优化它.基本上,我拥有的是
可执行文件A使用共享库myLib.so
我想gprof myLib.so.当我使用-pg选项编译myLib.so源时,它会生成一个.so文件.
但是,针对该库重新编译可执行文件A不会因某种原因生成*.gmon文件.需要做什么?我应该静态链接myLib吗?如果是这样,请告诉我如何.我是新手,所以请原谅我的无知.我每天都在学习
提前致谢.
这可能是一个简单的问题。我只是想对图像进行氡变换并使用 TensorFlow 中的函数保存它。但结果不对。我知道我可以使用 plt.imsave() 来正确保存图像,但我想知道如何在 TensorFlow 中做到这一点。
我是 TensorFlow 的新手,感谢您的帮助。
这是shepp-logan.jpg
我使用的图像。它是大小为 64*64 的灰度图像
这是我的代码。
from skimage.transform import radon,iradon
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
sess = tf.Session()
img = plt.imread('shepp-logan.jpg')
theta = np.linspace(0., 180., max(img.shape), endpoint=False)
sinogram = radon(img, theta=theta, circle=True)
sinogram = tf.cast(sinogram, tf.uint8)
sinogram = tf.expand_dims(sinogram, -1)
sinogram = tf.image.encode_jpeg(sinogram, quality=100, format='grayscale')
writer = tf.write_file('test_sinogram.jpg', sinogram)
sess.run(writer)
Run Code Online (Sandbox Code Playgroud) 在调试模式下编译而不是在发布时,程序是否有任何原因泄漏?
(Debug 表示调试信息,禁用编译器优化,Release 表示无调试信息/完全优化)
这就是它似乎所做的,但我无法弄清楚为什么。顺便说一句,净化在这里没有帮助
c++ ×4
architecture ×1
gprof ×1
memory-leaks ×1
namespaces ×1
profiling ×1
python ×1
tensorflow ×1
visual-c++ ×1