小编Bea*_*sen的帖子

我可以捕获exit()和die()消息吗?

我希望能够捕捉die()exit()留言.这可能吗?我希望类似的东西set_error_handlerset_exception_handler.我已经看过了,register_shutdown_function()但它似乎没有包含违规die()exit()调用的上下文.

我认识到,die()exit()不好的方式来处理错误.我不希望被告知不要这样做.:)我正在创建一个通用系统,并希望能够优雅地记录exit(),die()如果由于某种原因某人(不是我)决定这是一个好主意.

php die

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

有没有办法透明地对SQLAlchemy对象执行验证?

有没有办法在设置属性之后但在提交会话之前对对象执行验证?

例如,我有一个Device具有mac属性的域模型.我想确保在将mac属性添加到数据库或在数据库中更新之前,该属性包含有效且已清理的mac值.

看起来像Pythonic方法是做大多数事情作为属性(包括SQLAlchemy).如果我用PHP或Java编写过这个,我可能会选择创建getter/setter方法来保护数据,并让我灵活地在域模型中处理这个问题.

public function mac() { return $this->mac; }
public function setMac($mac) {
    return $this->mac = $this->sanitizeAndValidateMac($mac);
}
public function sanitizeAndValidateMac($mac) {
    if ( ! preg_match(self::$VALID_MAC_REGEX) ) {
        throw new InvalidMacException($mac);
    }
    return strtolower($mac);
}
Run Code Online (Sandbox Code Playgroud)

什么是使用SQLAlchemy处理此类情况的Pythonic方法?

(虽然我知道验证并且应该在其他地方处理(即Web框架),但我想弄清楚如何处理这些特定于领域的验证规则,因为它们必然经常出现.)

UPDATE

我知道在正常情况下我可以使用财产来做到这一点.关键部分是我在这些类中使用SQLAlchemy.我不明白SQLAlchemy究竟是如何表现它的魔力但我怀疑自己创建和覆盖这些属性可能导致不稳定和/或不可预测的结果.

python dns validation model sqlalchemy

17
推荐指数
3
解决办法
6115
查看次数

有没有可用的PHP DocBlock解析器工具?

我想为一些项目构建一些规模较小但高度定制的文档站点.PhpDocumentor非常棒,但它很重.我考虑过尝试调整模板,但是在花了几分钟的时间研究之后,我认为这将是太多的工作.

理想情况下,我希望看到一些东西,我可以传递一堆文件,并让它返回所有的文件,类和属性和方法,以及他们的元数据,以便我可以构建一些简单的模板基于数据.

是否有任何DocBlock解析器项目可以帮助我完成这项任务,还是我重新发明了那个轮子?

php documentation parsing docblocks

15
推荐指数
3
解决办法
8511
查看次数

为什么带引号的字符串在std :: string之前匹配bool方法签名?

给出以下方法:

// Method 1
void add(const std::string& header, bool replace);

//Method 2
void add(const std::string& name, const std::string& value);
Run Code Online (Sandbox Code Playgroud)

看起来以下代码最终会调用方法1而不是方法2:

something.add("Hello", "World");
Run Code Online (Sandbox Code Playgroud)

我最终创建了另一个看起来像这样的方法:

//Method 3
void MyClass::add(const char* name, const char* value) {
    add(std::string(name), std::string(value));
}
Run Code Online (Sandbox Code Playgroud)

有效.因此,当方法接受"带引号的字符串"时,它将按以下顺序匹配:

  1. const char*
  2. bool
  3. std::string

为什么引用的字符串会被视为a bool之前的std::string?这是通常的行为吗?我已为此项目编写了大量代码,并且在选择了错误的方法签名时没有任何其他问题...

c++ string arguments boolean

14
推荐指数
3
解决办法
1717
查看次数

为什么autoconf/automake项目会链接到已安装的库而不是本地开发库?

我正在创建一个libgdata包含一些测试和未安装程序的库.我遇到的问题是,一旦我安装了一次库,程序似乎就会链接到已安装的版本,而不再是本地版本../src/libgdata.la.

什么可能导致这个?我做错了什么吗?

这是我的test/Makefile.am样子:

INCLUDES = -I$(top_srcdir)/src/ -I$(top_srcdir)/test/

# libapiutil contains all of our dependencies!
AM_CXXFLAGS = $(APIUTIL_CFLAGS)
AM_LDFLAGS = $(APIUTIL_LIBS)

LDADD = $(top_builddir)/src/libgdata.la

noinst_PROGRAMS = gdatacalendar gdatayoutube

gdatacalendar_SOURCES = gdatacalendar.cc

gdatayoutube_SOURCES = gdatayoutube.cc

TESTS = check_bare

check_PROGRAMS = $(TESTS)

check_bare_SOURCES = check_bare.cc
Run Code Online (Sandbox Code Playgroud)

(libapiutil是另一个库,它有一些帮助程序来处理libcurl和libxml ++)

因此,例如,如果我在没有安装任何东西的情况下运行测试,一切正常.我可以在本地进行更改,并立即通过这些程序获取.

如果我安装了这个程序包,这些程序就会编译(看起来它实际上看起来本身就是标题),但是一旦我运行该程序就会抱怨缺少符号.

据我所知,它基于make输出链接到新构建的库(../src/libgdata.la),所以我不确定为什么会发生这种情况.如果我删除已安装的文件,那么对src/*的本地更改就可以了.

我在下面包含了gdatacalendar的make输出.

g++ -DHAVE_CONFIG_H -I. -I.. -I../src/ -I../test/   -I/home/altern8/workspaces/4355/dev-install/include -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include -I/usr/include/libxml2 -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -g -O2 -MT gdatacalendar.o -MD -MP -MF .deps/gdatacalendar.Tpo …
Run Code Online (Sandbox Code Playgroud)

msbuild automake autoconf build libtool

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

逐步使用分支提取子树

我正在使用git-subtree从项目中提取目录.

git subtree split --prefix=src/SubProject --branch=SubProject origin/master
Run Code Online (Sandbox Code Playgroud)

鉴于这是我怎么想启动项目开始与(特别是不--rejoin)如何从分裂只有改变origin/masterSubProject在后续运行?

对于较小的项目,这一直很好.我可以用大约5秒的时间来分割项目.但是在较大的存储库中,这可能需要相当长的时间.我发现每次拆分需要5分钟.我想要合作的一些项目在一个存储库中有超过45个子项目.

我尝试了许多我认为可能有用的东西,但每种东西都以这种或那种方式失败了.我的要求是:

  • 绝不能以origin/master任何方式搞乱(所以大部分--rejoin都是不可能的)
  • 它不能添加额外的合并提交(想一想:--ff-only从中获取新的更改origin/master)
  • SubProject库必须有稳定的提交ID的.这意味着在一次或多次增量更新后SubProject,它应该在其历史记录中具有相同的提交ID,如果我在此帖子的顶部重新运行原始命令,它将获得.
  • 它必须是自动化的,无需人工干预

我不怕复杂的解决方案,但需要自动化.因历史变迁而失败是好的; 在那时,脚本可以回退以从头开始构建整个事物.在这种情况下,用户知道他们做了什么,所以他们可以从头开始经历一个很长的重建过程.:)

--rejoin

我尝试使用--rejoin并保留一个额外的副本,origin/master只是作为添加的更改历史记录的容器--rejoin.我遇到了这里的问题是,我是不能够或者git rebase origin/mastergit merge --ff-only origin/master不加干预.我需要能够以自动方式执行此操作,因此这是不可接受的.

合并提交

我能够按照我的意愿使它工作,git merge origin/master但它导致了合并提交.由于这次合并提交不会上游,我认为,未来的历史将无法预测,因此git subtree split原始环境中的新鲜事物将无法再现相同的历史记录.我可能错了.如果是这样,请向我解释这是如何安全的.:)

提交范围

我尝试使用提交范围,我能够创建一个新的子树分割,SubProject其中只包含一个特定时间点的提交列表HEAD.这可能会有效,除非它看起来好像生成了一组新的提交ID,所以我认为这不是一个选项.

git git-subtree

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

使用cURL和PHP为相同的键和文件上载混合多个值

我在PHP的cURL绑定中遇到了限制.似乎没有简单的方法为postfields发送相同的多个值.我遇到的大多数解决方法都涉及手工创建URL编码的帖子字段tag = foo&tag = bar&tag = baz),而不是使用CURLOPT_POSTFIELDS的关联数组版本.

这似乎是一个非常普遍的需要支持,所以我觉得我一定错过了什么.这真的是处理同一个键的多个值的唯一方法吗?

虽然这种解决方法可能被认为是可行的(如果不是真的很烦人),我的主要问题是我需要能够为同一个键执行多个值并且还支持文件上载.据我所知,文件上传或多或少需要使用CURLOPT_POSTFIELDS的关联arravy版本.所以我觉得我被卡住了.

我已经在cURL PHP邮件列表上更详细地发布了这个问题,希望有人对此有一些想法.

关于我可以在哪里寻找更多信息的建议或提示非常感谢!

php curl

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

我可以在不查看每个元素的情况下将std :: vector <Animal*>转换为std :: vector <Dog*>吗?

我有一个基类,有几个类扩展它.我有一些通用的库实用程序,它们创建一个包含指向基类的指针的向量,以便任何子类都可以工作.如何将向量的所有元素强制转换为特定的子类?

// A method is called that assumes that a vector containing
// Dogs casted to Animal is passed.
void myDogCallback(vector<Animal*> &animals) {
    // I want to cast all of the elements of animals to
    // be dogs.
    vector<Dog*> dogs = castAsDogs(animals);
}
Run Code Online (Sandbox Code Playgroud)

我天真的解决方案看起来像这样:

// A method is called that assumes that a vector containing
// Dogs casted to Animal is passed.
void myDogCallback(vector<Animal*> &animals) {
    // I want to cast all of the elements of animals to
    // be …
Run Code Online (Sandbox Code Playgroud)

c++ templates casting vector

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

如何让远程跟踪分支在裸Git存储库中与远程源保持同步?

我正在尝试维护一个Git存储库的裸副本,并且有一些问题使远程跟踪分支保持最新.我创建这样的远程跟踪分支:

git branch -t 0.1 origin/0.1
Run Code Online (Sandbox Code Playgroud)

这似乎做了我需要做的事情.但是,如果我进行更改origin然后使用裸仓库获取,事情就会开始崩溃.我的工作流程如下:

git fetch origin
Run Code Online (Sandbox Code Playgroud)

看起来所有的提交都在那时进行,但我的本地副本0.1没有更新.我可以通过执行以下操作看到更改已进入存储库:

git diff 0.1 refs/remotes/origin/0.1
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能使用远程更新更新我的跟踪分支?我觉得我必须在某个地方错过一步或一面旗帜.

更新:附加说明

通常情况下,人们会进入裸存储库,而不是从内部运行git fetch.如果你可以安排这样做,生活会更容易.

以下是对工作流程的一些澄清.

该项目的公共git存储库托管在GitHub上.我正在使用Redmine管理项目(维基,问题,论坛).Redmine需要一个本地裸存储库才能运行.当GitHub收到更改时,它会ping Redmine.Redmine然后尝试从其原点(GitHub)获取更改.

如果我只是与master合作但是它不能与我的跟踪分支机构合作,那么这很有用.这些更改正在导入,但未在Redmine存储库浏览器的分支中列出,因为本地分支未进行更新.

我确信我可以通过另一种方式解决这个问题,但是找到(通用)解决方案来启动和运行跟踪分支绝对是我的偏好,因为Redmine的大多数git相关插件都假设"git fetch origin"之类的东西都是这需要做.

请参阅已接受的答案以获取完整的解 该--mirror解决方案似乎正是需要在这种情况下.

git branch tracking

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

C++指向成员函数继承的指针

我需要能够拥有一个由继承自它的类定义的超类执行回调.我对C++相对较新,从我可以看出它看起来像成员函数指针的主题是一个非常模糊的区域.

我已经看到了问题的答案和随机博客文章,讨论各种各样的事情,但我不确定他们中是否有任何具体处理我的问题.

这是一段简单的代码,说明了我想要做的事情.这个例子可能没有多大意义,但它准确地类似于我想写的代码.

class A {
    protected:
    void doSomething(void (A::*someCallback)(int a)) {
        (*this.*someCallback)(1234);
    }
};

class B : public A {
    public:
    void runDoIt() { doSomething(&B::doIt); }
    void runDoSomethingElse() { doSomething(&B::doSomethingElse); }
    protected:
    void doIt(int foo) {
        cout << "Do It! [" << foo << "]\n";
    }
    void doSomethingElse(int foo) {
        cout << "Do Something Else! [" << foo << "]\n";
    }
};

int main(int argc, char *argv[]) {
    B b;
    b.runDoIt();
    b.runDoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers function callback

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