附录:我意识到这篇文章似乎是之以鼻的形式,但是如果您可以纠正我的任何误解,进行澄清,或者更好:帮助我解决迭代器问题,我将非常感谢!我目前正在使用cplex 9(我知道它不是最新的,已经不可用了).
是我还是CPLEX Concert API可以使用某些改进?在我当前看来,说它还有很多不足之处,因为它似乎违反了我见过的几乎所有针对质量C API设计的既定惯例.
著名作品:
>常量设置器方法
> operator []返回引用句柄对象而不是引用
> operator [] const返回不是const的引用句柄,leading to potential errors.
>没有数组迭代器(即使迭代器不适用于并行编程,但在我看来,迭代器仍应可供不太关键的代码使用)
>对于希望将两者混在一起的STL用户(或者,如果不是STL,至少是本身已经与STL兼容的代码,如Boost),则存在极大的开发人员敌意.
>示例:数组类中没有单个typedef,甚至(绝对值和绝对最小值)value_type也没有.
我做了一个数组包装器,这很容易.我做了一个迭代器包装器,没有那么多.由于前两点,迭代器(当前)导致代码在不应该编译时编译!我仍在尝试找到解决方法(我正在使用boost.iterator_facade).
别误会,我了解在设计API时需要权衡取舍.我很清楚,API旨在简化手册(我想像的用户隐藏了与语言有关的注意事项).但是,这样做虽然可以简化C API的设计,但是却使我的代码编写变得更加复杂和耗时,以弥补我目前认为的设计错误.
在罗马时,做罗马人!
我很想听听他们关于这些方面的设计决定的理由.
编辑:我设法使Iterator类工作,在处理过程中,我尽可能地消除了在cplex的对象传递设计中通过迭代器使用的特殊情况下的可用性和正确性缺陷.性能(在从const_iterator返回它们之前克隆可提取对象).剩下(我相信)只剩下第一个显着的缺陷,而如果没有在cplex api中的每个受影响的类型周围附加额外的间接层,则无法纠正该缺陷..不,谢谢,我只需要注意调用频率,当取消引用IloExtractable派生类型的const_iterators.
解决方法:
并不是说这会对您有很大帮助,但是当我从CPLEX 9切换到12时,我无法相信所取得的进步,因为12是免费供学术使用,因此可以使用.