我面临以下难题:我们的软件有一个算法对象的抽象基类.所有这些对象都有一个共同的execute()
方法,例如:
class Algorithm
{
public:
// [...]
virtual void execute() = 0;
// [...]
};
Run Code Online (Sandbox Code Playgroud)
对于我们想要实现的每个算法,我们只是从基类继承并将所有加载的算法对象存储在一个中心位置.到现在为止还挺好.
现在的问题在于算法的参数.我们希望能够为每个算法描述需要设置的参数(由外部类).为此,我们为每个算法提供了一个ParameterList
包含其参数的对象.我应该澄清一下,对于我们来说,参数由某种类型(例如int
)和标签(例如"迭代次数")组成.
现在,当我们想要连接ParameterList
到某种GUI 时,问题就开始了.显然,我们的算法应该没有我们正在使用的图形API(Qt,GTK等)的"知识".然而,在同一方面,我们希望能够在语义上描述算法参数,例如通过指定算法需要文件名.然后如何显示此文件名取决于GUI.
有没有办法将它ParameterList
与某种语义类型的知识结合起来?
我意识到这个问题听起来很模糊.但是,我不允许发布任何非平凡的代码示例(出于NDA原因).那么,过去有没有人遇到过类似的问题?
包装起来:我们希望我们的对象能够描述GUI所需的参数,而不需要知道GUI的确切细节.
我已经boost::signals2
在我的项目中使用了一段时间.令我感到羞耻的是,我仍然不明白它们是如何在引擎盖下实现的.我的问题已经从信号的定义开始了.如何定义如
boost::signals2::signal< void (bool, double) >
Run Code Online (Sandbox Code Playgroud)
如何处理?我可以从实现细节中看到签名成为一个适当命名的模板参数Signature
.但是,我不懂语法.C++标准是否允许这种语法?如果以这种形式提供功能签名,信号如何"存储"?
我已经尝试查看源代码,但无法找到此语法的解释.任何帮助,将不胜感激.
有没有办法让Boost标记生成器分割到字符串下方而不拆分引用的部分?
string s = "1st 2nd \"3rd with some comment\" 4th";
Exptected output:
1st
2nd
3rd with some comment
4th
Run Code Online (Sandbox Code Playgroud)