小编Sha*_*dow的帖子

如何在C++中实现"虚拟模板功能"

首先:我已阅读并且我现在知道在C++中虚拟模板成员函数(但是?)是不可能的.解决方法是将类作为模板,然后在member-function中使用template-argument.

但是在OOP的上下文中,我发现如果该类实际上是一个模板,下面的例子将不会非常"自然".请注意,代码实际上不起作用,但gcc-4.3.4报告:error: templates may not be ‘virtual’

#include <iostream>
#include <vector>

class Animal {
    public:
        template< class AMOUNT >
        virtual void eat( AMOUNT amount ) const { 
            std::cout << "I eat like a generic Animal." << std::endl; 
        }
        virtual ~Animal() { 
        }
};

class Wolf : public Animal {
    public:
        template< class AMOUNT >
        void eat( AMOUNT amount) const { 
            std::cout << "I eat like a wolf!" << std::endl; 
        }
        virtual ~Wolf() { 
        }
};

class Fish : public …
Run Code Online (Sandbox Code Playgroud)

c++ virtual templates

41
推荐指数
5
解决办法
5万
查看次数

查找图表中的所有周期,redux

我知道这个问题有很多答案.但是,我发现它们中没有一个能够真正实现它.
有人认为一个循环(几乎)与强连通组件相同(s.在有向图中查找所有循环),因此可以使用为该目标设计的算法.
有人认为找到一个循环可以通过DFS完成并检查后端(s.文件依赖关系的boost图文档).

我现在想对是否可以通过DFS检测图中的所有循环并检查后沿有一些建议?
http://www.me.utexas.edu/~bard/IP/Handouts/cycles.pdf(在SO上找到)陈述了一种基于循环基础的方法.我个人而言,我觉得它不是很直观,所以我正在寻找一个不同的解决方案.

编辑:我最初的意见显然是错误的.S."Moron"的下一个回答.
初步意见:我的观点是它确实可以这样工作,因为DFS-VISIT(DFS的伪代码)刚刚进入尚未访问过的每个节点.从这个意义上讲,每个顶点都表现出一个潜在的循环开始.此外,由于DFS每次访问每个边缘,因此也会覆盖通向循环起点的每条边.因此,通过使用DFS和后沿检查,确实可以检测图中的所有周期.注意,如果存在具有不同数量的参与者节点的循环(例如,三角形,矩形等),则必须进行额外的工作以区分每个循环的实际"形状".

graph-theory graph depth-first-search triangle-count

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

在Makefile.am成功制作后打印一些东西

我是autotools的新手,并且设法创建了一个令人满意的configure.ac.现在我想在某个地方(configure.ac,Makefile.am或者其他地方)指定在成功"make"之后,打印一个简短的注释.像"确保你在LD_LIBRARY_PATH中也包含了正确的路径"之类的东西.

但是,当我在Makefile.in中指定它时,执行"automake"会覆盖此文件(如预期的那样).所以我还没有找到如何扩展例如Makefile.am以包含"echo确保你在一个目标的编译终止时也包含了LD_LIBRARY_PATH中的正确路径".ATM我只有一个目标(bin_PROGRAMS = myprog).除此之外,编译等工作正常.但作为可能"没有"经验的用户的信息,我真的想打印出一些最终的建议.

有没有办法实现这个目标?

感谢你并致以真诚的问候.

PS我知道cmake并且尚未使用它,目前,我想使用autotools和automake.

automake

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

将注释字符 (#) 添加到命令行开头的 Bash 键盘快捷键

当使用包括 iTerm 在内的 Mac OS X 时,我只需按 Shift+即可$,我当前提示的 bash 行将添加#到开头并返回该行。我非常喜欢这个,因为它可以防止在编辑命令时实际执行该命令,并且我不必跳到行的开头来插入该#字符。但是,当我登录到我们的集群时,此功能就会丢失。我尝试搜索此功能,但只找到有关使用 sed 等的帖子,因此建议不适用于我所指的使用 bash 的交互式类型。

有人可以向我指出解释此功能的资源(bash 指南吗?),以便我可以查找如何在登录其他计算机时使其工作?或者这是 Mac/iTerm 特定的东西?但是,我希望它也能在我们的集群上工作,当然只要我使用我的机器。

keyboard bash shortcut

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