我目前正在将boost :: intrusive_ptr与我的GUI类一起使用.虽然这或多或少是一个方便的问题,但有没有一种正确的方法来获取当前类的类型名称?我问的原因是我有一个用于typedef的不同指针类型的宏:
#define INTRUSIVE_PTR_TYPEDEFS(CLASSNAME) typedef boost::intrusive_ptr<CLASSNAME> Ptr; \
typedef boost::intrusive_ptr<const CLASSNAME> CPtr; \
typedef CLASSNAME* WeakPtr; \
typedef const CLASSNAME* CWeakPtr;
...
class Widget
{
public:
INTRUSIVE_PTR_TYPEDEFS(Widget);
...
};
class Button : public Widget
{
public:
INTRUSIVE_PTR_TYPEDEFS(Button);
...
};
Run Code Online (Sandbox Code Playgroud)
CLASSNAME自动推断它会更舒服,所以你可以简单地将它'''加入到课堂体内.我正在使用Visual Studio 2010附带的编译器.
提前致谢!
我在http://youtu.be/gGQ-vAmdAOI?t=23m14s工作时,在 23:14 我觉得“扩展列表”的分支和绑定与 Dijkstra 的算法非常相似。稍后在讲座中,当算法再次使用可接受的启发式进行扩展时,我们得到 A*。
这让我想到 Dijkstra 的算法就是分支定界的子类。那正确吗?
总结讲座:
探索了搜索算法。特别是,它们从一个简单的分支定界解决方案开始:
直到访问(扩展)目的节点为止,访问与源节点距离最短的节点,并将其后继节点加入要访问的节点优先级队列(按最小距离排序)。这还没有检测到循环(例如多次访问节点)并且由于组合爆炸而效率低下。
一个简单的扩展会使算法执行得更好:记住哪些节点已经被访问过(扩展,因此是扩展列表)。现在没有节点被访问两次,算法的性能要好得多。
在最后一部分中,将可接受的启发式添加到混合中以获得 A*。
我希望这是足够的信息,并且我不必复制讲座中的示例。如果不是,请告诉我,我会做的!
有没有办法将我当前的 GHCi 会话保存到文件中?也许下次当我再次打开 GHCi 时导入它?
我可能可以求助,head -n 42 ~/.ghc/ghci_history | tac但这有点老套。
我在理解D中的数组身份时遇到了问题.
Object s = null; // or new Object
auto a = [s];
auto b = [s];
writeln(a is b); // > false
writeln(a == b); // > true
Run Code Online (Sandbox Code Playgroud)
false然后打印出来true.我没有问题==,但在D2 ref中说明了这一点
对于静态和动态数组,identity定义为引用相同的数组元素和相同数量的元素.
这与我所经历的行为相矛盾.a并且b两者都有一个元素is s,因此它们应该是相同的.我误解了什么吗?
编辑:我错了认为相同的数组元素意味着他们比较相等,is在D中哪种模型的身份比较.
每当我想在一个简单的类中存根方法时,我经常提取一个接口.现在,如果该类的构造函数是公共的并且不是太复杂或依赖于复杂类型,那么它将具有相同的效果,只需使该方法成为虚拟和继承.这比提取界面更可取吗?如果是这样,为什么?
编辑:
class Parser
{
public IDictionary<string, int> DoLengthyParseTask(Stream s)
{
// is slow even with using memory stream
}
}
Run Code Online (Sandbox Code Playgroud)
有两种方法:提取接口或使方法成为虚拟.我实际上更喜欢接口,但这可能会导致IParser Parser元组爆炸......
当一个结构体被 malloc'd 时,很明显该结构体有多大。然而,为 256 字节的结构声明 64 个虚拟双字字段是非常乏味的。将结构声明为具有固定大小的数组并没有多大帮助,因为您无法单独命名元素。目前我正在使用 AutoHotKey 脚本来添加字段,该脚本今天因任何原因停止工作。
那么:有没有办法一次在结构声明中添加多个字段?也许通过一些idc api?
我想在编译时加入文件名和图像格式.以下示例不起作用,因为string[]无法在编译时评估我想...
immutable imageFormats = ["bmp", "jpg", "gif", "png"];
template fileNamesWithImageFormat(string[] fileNames)
{
string[] fileNamesWithImageFormat() {
string[] ret;
ret.length = imageFormats.length * fileNames.length;
for (int j = 0; j < fileNames.length) {
for (int i = 0; i < imageFormats.length; ++i) {
ret[j * fileNames.length + i] = fileNames[j] ~ "." ~ imageFormats[i];
}
}
return ret;
}
}
Run Code Online (Sandbox Code Playgroud)
它失败并显示错误消息:
Error: arithmetic/string type expected for value-parameter, not string[]
Run Code Online (Sandbox Code Playgroud)
我需要最终加入import().如何解决错误?