小编Ida*_*rye的帖子

这个Singleton实现有什么问题?

这个想法是在程序结束时删除C++中的Singleton.我们在课堂上学到了这种实现方法:

class Singleton
{

private:
    static Singleton* the_singleton;

protected:
    Singleton()
    {
        static Keeper keeper(this);
        /*CONSTRUCTION CODE*/
    }
    virtual ~Singleton()
    {
        /*DESTRUCTION CODE*/
    }

public:
    class Keeper
    {

    private:
        Singleton* m_logger;

    public:
        Keeper(Singleton* logger):m_logger(logger){}

        ~Keeper()
        {
            delete m_logger;
        }
    };
    friend class Singleton::Keeper;

    static Singleton* GetInstance();
    {
        if (!the_singleton)
            the_singleton = new Singleton();
        return the_singleton;
    }
};

Singleton* Singleton::the_singleton = NULL;
Run Code Online (Sandbox Code Playgroud)

我们的想法是,在第一次创建Singleton时,将在Singleton的C'tor中创建一个静态Keeper对象,一旦程序结束,Keeper将被销毁,反过来将破坏它指向的Singleton实例至.

现在,这个方法对我来说似乎相当麻烦,所以我建议抛弃守护者类并使Singleton的实例成为getInstance方法的静态对象:

<!-- language: c++ -->

class Singleton
{

protected:
    Singleton()
    {
        /*CONSTRUCTION CODE*/
    }

    ~Singleton()
    {
        /*DESTRUCTION CODE*/
    } …
Run Code Online (Sandbox Code Playgroud)

c++ singleton

5
推荐指数
2
解决办法
1223
查看次数

将模板化函数作为参数发送到D中的模板化函数

我正在尝试将D sort函数作为函数的模板参数发送pipe.当我使用sort没有模板参数时,它工作:

import std.stdio,std.algorithm,std.functional;

void main()
{
    auto arr=pipe!(sort)([1,3,2]);
    writeln(arr);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用sort模板参数时:

import std.stdio,std.algorithm,std.functional;

void main()
{
    auto arr=pipe!(sort!"b<a")([1,3,2]);
    writeln(arr);
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误 - main.d(5): Error: template instance sort!("b<a") sort!("b<a") does not match template declaration sort(alias less = "a < b",SwapStrategy ss = SwapStrategy.unstable,Range)

为什么会这样?sort!"b<a"它自己工作,它有相同的参数和返回类型sort,所以为什么pipe接受sort但不是sort!"b<a"?我尝试做的是否有正确的语法?

UPDATE

好的,我试图包装该sort功能.以下代码有效:

import std.stdio,std.algorithm,std.functional,std.array;

template mysort(string comparer)
{
    auto mysort(T)(T source)
    {
        sort!comparer(source);
        return source;
    }
} …
Run Code Online (Sandbox Code Playgroud)

templates d dmd

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

Ruby的'懒惰'比分配大型列表的性能低吗?

我正在尝试处理大量的数字:

require 'benchmark'

N = 999999

Benchmark.bm 10 do |bm|
   bm.report 'Eager:' do
 (0..N).select(&:even?).map{|x| x * x}.reduce(&:+)
   end  
   bm.report 'Lazy:' do
 (0..N).lazy.select(&:even?).map{|x| x * x}.reduce(&:+)
   end  
 end;
Run Code Online (Sandbox Code Playgroud)

根据我的理解,懒人版本应该快得多,因为渴望版本需要分配两个列表,每个列表包含50万个项目(一个用于select一个,一个用于map),而懒惰版本则流式传输所有内容.

然而,当我运行它时,懒惰版本需要的时间是渴望版本的两倍多!(http://rextester.com/OTEX7399)

         user     system      total        real
Eager:       0.210000   0.010000   0.220000 (  0.216572)
Lazy:        0.580000   0.000000   0.580000 (  0.635091)
Run Code Online (Sandbox Code Playgroud)

怎么会这样?

ruby lazy-sequences

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

@classmethod没有调用我的自定义描述符的__get__

我有一个装饰器Special,它将一个函数本身转换为两个版本:一个可以直接调用并以结果为前缀'regular ';一个可以使用.special并以结果为前缀'special '

class Special:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner=None):
        if instance is None:
            return self
        return Special(self.func.__get__(instance, owner))

    def special(self, *args, **kwargs):
        return 'special ' + self.func(*args, **kwargs)

    def __call__(self, *args, **kwargs):
        return 'regular ' + self.func(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

它适用于常规方法和静态方法-但.special不适用于类方法:

class Foo:
    @Special
    def bar(self):
        return 'bar'

    @staticmethod
    @Special
    def baz():
        return 'baz'

    @classmethod
    @Special
    def qux(cls):
        return 'qux'

assert Foo().bar() == 'regular bar'
assert …
Run Code Online (Sandbox Code Playgroud)

python class-method python-decorators

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

现在在git safe中检查远程分支吗?

我刚刚开始学习Git,我正在使用的教程说当克隆远程存储库时,切换到远程分支是一个很大的禁忌.那就是 - 如果我克隆了一个具有分支名称的存储库branch1,并且我想要使用它,我需要使用它

git checkout --track -b branch1 origin/branch1
Run Code Online (Sandbox Code Playgroud)

跟踪它.但是,当我试图使用时

git checkout branch1
Run Code Online (Sandbox Code Playgroud)

Git回答道

Branch branch1 set up to track remote branch branch1 from origin.
Switched to a new branch 'branch1'
Run Code Online (Sandbox Code Playgroud)

因此,我的常识告诉我,自从编写该教程以来,Git的开发人员修复了这个陷阱,并且如果有人试图切换到远程分支,Git会自动执行它,并创建一个跟踪它的本地分支.但是,我在发布说明或Google搜索中找不到任何对此更改的引用.

那么,他们修好了吗?简单地检查那些远程分支现在是否安全?或许我误解了该教程中的警告,这是指我应该注意的另一个陷阱?

git branch git-remote git-branch

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

按Ctrl + C时,禁用"类型:退出<Enter>退出Vim"消息

我正在开发一个Vim插件,需要运行一个shell命令(针对运行编译器和构建系统)并捕获它的输出.我还想在运行时显示命令的stdout和stderr,所以我使用Ruby来运行命令(虽然我仍然使用Vim的:echo命令显示,所以我可以为stderr设置高亮显示)

无论如何,我想让用户在中间取消命令.取消程序传统上是使用Ctrl+C,并且Vim允许用户Ctrl+C通过抛出来取消当前运行的vimscript Vim:Interrupt.我想使用Vim的:sleep命令允许用户按下Ctrl+C他们想要取消他们正在运行的命令,捕获Vim:Interrupt并相应地继续.

我的问题是,Ctrl+C在不插入模式时按下Vim会导致Vim显示Type :quit<Enter> to exit Vim- 并删除之前回显的任何消息.这对我来说是一个问题,因为我希望在用户取消显示之前保留命令放入stdout和stderr的任何输出(并且可能添加命令被取消的消息).

有没有办法暂时禁用此消息并保留用户按下之前回显的内容Ctrl+C

vim

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

调度Rails任务以安全备份数据库文件

我在Windows Server 2008计算机上有一个Rails应用程序.该应用程序使用sqlite数据库,我需要每天备份一次.应该通过将数据库文件复制到镜像文件夹来完成备份,镜像备份服务将从那里获取备份.

有一个问题.我想避免在应用程序使用它时复制数据库文件.如果我在操作过程中复制文件,我会在备份中得到一个损坏的和/或锁定的数据库文件 - 如果可能的话,恢复这样的文件就太麻烦了.

现在,是否有计划任务等待数据库不使用?或者在备份任务运行时阻止应用程序的其余部分使用数据库?

至于调度,我已经看到了几个解决方案,但我还没有提交调度解决方案,所以我可以依靠调度解决方案功能来解决备份问题.

ruby sqlite backup ruby-on-rails scheduled-tasks

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