小编Seb*_*raf的帖子

获取当前类的typedef

我目前正在将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附带的编译器.

提前致谢!

c++ compiler-construction macros typedef

5
推荐指数
1
解决办法
1666
查看次数

分支与边界(+ 扩展列表)与 Dijkstra 的图上算法之间的区别

我在http://youtu.be/gGQ-vAmdAOI?t=23m14s工作时,在 23:14 我觉得“扩展列表”的分支和绑定与 Dijkstra 的算法非常相似。稍后在讲座中,当算法再次使用可接受的启发式进行扩展时,我们得到 A*。

这让我想到 Dijkstra 的算法就是分支定界的子类。那正确吗?


总结讲座:

探索了搜索算法。特别是,它们从一个简单的分支定界解决方案开始:

直到访问(扩展)目的节点为止,访问与源节点距离最短的节点,并将其后继节点加入要访问的节点优先级队列(按最小距离排序)。这还没有检测到循环(例如多次访问节点)并且由于组合爆炸而效率低下。

一个简单的扩展会使算法执行得更好:记住哪些节点已经被访问过(扩展,因此是扩展列表)。现在没有节点被访问两次,算法的性能要好得多。

在最后一部分中,将可接受的启发式添加到混合中以获得 A*。

我希望这是足够的信息,并且我不必复制讲座中的示例。如果不是,请告诉我,我会做的!

algorithm graph dijkstra branch-and-bound

5
推荐指数
1
解决办法
2584
查看次数

导出和导入 GHCi 会话

有没有办法将我当前的 GHCi 会话保存到文件中?也许下次当我再次打开 GHCi 时导入它?

我可能可以求助,head -n 42 ~/.ghc/ghci_history | tac但这有点老套。

haskell ghci

5
推荐指数
0
解决办法
382
查看次数

数组标识 - 是

我在理解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中哪种模型的身份比较.

arrays identity d

3
推荐指数
1
解决办法
121
查看次数

TDD - 提取界面或使方法成为虚拟

每当我想在一个简单的类中存根方法时,我经常提取一个接口.现在,如果该类的构造函数是公共的并且不是太复杂或依赖于复杂类型,那么它将具有相同的效果,只需使该方法成为虚拟和继承.这比提取界面更可取吗?如果是这样,为什么?

编辑:

class Parser
{
    public IDictionary<string, int> DoLengthyParseTask(Stream s)
    {
        // is slow even with using memory stream
    }
}
Run Code Online (Sandbox Code Playgroud)

有两种方法:提取接口或使方法成为虚拟.我实际上更喜欢接口,但这可能会导致IParser Parser元组爆炸......

c# tdd

2
推荐指数
1
解决办法
364
查看次数

声明多个结构体字段

当一个结构体被 malloc'd 时,很明显该结构体有多大。然而,为 256 字节的结构声明 64 个虚拟双字字段是非常乏味的。将结构声明为具有固定大小的数组并没有多大帮助,因为您无法单独命名元素。目前我正在使用 AutoHotKey 脚本来添加字段,该脚本今天因任何原因停止工作。

那么:有没有办法一次在结构声明中添加多个字段?也许通过一些idc api?

ida

2
推荐指数
1
解决办法
2949
查看次数

在编译时加入字符串

我想在编译时加入文件名和图像格式.以下示例不起作用,因为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().如何解决错误?

arrays string d ctfe

1
推荐指数
1
解决办法
201
查看次数