|
2
|
| Ozgur Ozcitak Vikash Choudhary · 技术社区 · 18 年前 |
|
|
1
8
通过使用惰性评估,您可以将自己限制为一个小的中间层。差不多
|
|
2
3
至少可以避免痛苦的事情
|
|
|
3
3
在C++中,可以使用 Template Metaprograms 而且 here ,使用模板来完成此操作。然而,模板编程是非常重要的。我不知道C语言中是否有类似的技术,很可能没有。 C++中的这个技术正好符合你的需要。缺点是,如果某些地方不太正确,那么编译器错误消息往往会运行到多个页面,并且几乎无法破译。 如果没有这样的技术,我怀疑您仅限于add3矩阵之类的函数。 Efficient Matrix Programming in C# 虽然它看起来与C++模板表达式略有不同。 |
|
|
5
2
这不是最干净的解决方案,但如果您知道评估顺序,可以执行以下操作:
|
|
|
6
2
我建议使用一种行为非常像StringBuilder的MatrixAdder。将矩阵添加到MatrixAdder中,然后调用ToMatrix()方法,该方法将在惰性实现中为您添加矩阵。这将得到您想要的结果,可以扩展到任何类型的懒散评估,但也不会引入任何可能会混淆其他代码维护者的聪明实现。 |
|
|
7
2
我认为您可以将所需的插件行为明确化:
因此,临时机构仍然存在。
|
|
|
8
1
比亚恩·斯特劳斯特鲁普有一篇短文,叫做 Abstraction, libraries, and efficiency in C++ Blitz++ ,一个用于科学计算的库,它还具有矩阵的高效运算,以及一些其他有趣的库。另外,我建议你阅读 a conversation with Bjarne Stroustrup on artima.com 关于这个问题。 |
|
|
9
0
使用运算符是不可能的。 |
|
|
10
0
当然,你会失去
|
|
|
11
0
有几种方法可以实现惰性评估来实现这一点。但重要的是要记住,编译器并不总是能够获得所有代码中最好的代码。
|