我最近需要使用'git am'在我的仓库中应用16个补丁,我小心地为每个补丁使用'--committer-date-is-author-date'.但是,我还需要调整每个am'd补丁的提交消息,并且 - 在完成所有16个补丁后 - 我发现'commit --amend'碰到了每个补丁的提交者时间戳.
我终于知道我的问题可以一举解决
git rebase --committer-date-is-author-date <SHA-of-commit-prior-to-patches>
Run Code Online (Sandbox Code Playgroud)
但是在尝试使用'filter-branch'来解决我的问题之前没有这个问题.我很好奇我做错了什么.这是我的尝试:
git filter-branch --env-filter \
'export GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE' SHA1..HEAD
Run Code Online (Sandbox Code Playgroud)
这是结果:
Rewrite 1c52265d1f06bd67e0fed1c09e1e75249424476e (1/15)/usr/lib/git-core/git-filter-branch: 1: export: -0500: bad variable name
Run Code Online (Sandbox Code Playgroud)
我做错了什么?我不允许在env-filter中设置/导出一个变量作为另一个变量的值吗?请注意,如果$ GIT_COMMIT匹配特定SHA,我会从有条件地更改GIT_AUTHOR_DATE和GIT_COMMITTER_DATE的方法调整我的方法,但在这种情况下,两个GIT _*_ DATE变量都被设置为常量字符串,而不是另一个变量.
(我看到之前已经问过类似的问题,但是我看到的那些问题似乎并没有完全触及我的用例.特别是,我想知道我的编译失败是否是由于一个错误,或者是我尝试什么是verboten的结果.)
我希望实现委托模式,用于事件处理.我想也许对我的需求最好的方法是成员函数指针的映射,由std :: string索引(表示事件类型.)
我开始试图完成这个std::function,但遇到了一些问题,然后决定尝试使用原始MFP.(我仍然愿意考虑std::function,我会接受一个答案,说明如何使用这种方法来完成我的确切需求.但我仍然想知道我目前的方法有什么问题.)
我能够用一个班级来完成这个工作.但是我实际上希望委托映射由抽象基类提供,然后让派生类将其委托注册到该映射中.除非我在下面的代码中犯了一些错误,否则这似乎是不可能的; 似乎成员函数指针不能是多态的.
我得到的编译错误如下:
mfp5.cpp: In constructor ‘Derived::Derived()’:
mfp5.cpp:41:21: error: cannot convert ‘int (Derived::*)(const Base::EventContext&)’ to ‘std::map<std::basic_string<char>, int (Base::*)(const Base::EventContext&)>::mapped_type {aka int (Base::*)(const Base::EventContext&)}’ in assignment
_delegates["foo"] = &Derived::FooEventHandler;
Run Code Online (Sandbox Code Playgroud)
Base::*,我想在其中插入一些Derived::*.class Base
{
public:
struct EventContext
{
int data1;
};
Base() {}
virtual int ProcessEvent(std::string event, EventContext ctx) =0;
protected:
typedef int (Base::* EventHandler)(const EventContext& context);
typedef std::map<std::string, EventHandler> EventDelegateMap;
EventDelegateMap _delegates; …Run Code Online (Sandbox Code Playgroud) 我正在寻求一种适合我需求的设计模式的建议:
在我的C++项目中,一个特定的纯虚拟类将代表某个概念的所有相关功能的超集,并且从该纯虚拟类派生的具体类将分别是该超集的一些不同的有限子集.运行时只存在这些具体类中的任何一个实例.
如果我使用C编程,我可能会选择将其实现为函数指针的结构,对于任何缺少的功能都使用NULL.但这对C++来说并不十分令人满意.
关于我能想到的唯一一个想法是一个类,每个成员函数都是'protected',还有一组匹配的'public'成员函数指针.构造函数将负责将MFP初始化为NULL或相应成员函数的地址,具体取决于类提供的功能.
但这实际上只是C++ - 比我上面首次提到的C-struct-of-function指针要少得多.而且,也许它足够好了.但我想知道是否有人可以为这种情况建议一个更令人满意,更有洞察力的设计模式.
我对任何普遍接受的做法持开放态度.STL很好.
更新:MFP方法不太令人满意的原因是,我将不得不为不适用的那些实现无操作的存根 - 因为纯虚基类 - 即使我会将各自的MFP设置为NULL. 经过进一步思考,这次更新完全是假的.(在没有使用NULL的情况下,它们将不会是无用的存根,它们将是有用的功能.我认为我很累.)
更新2:类比:我的项目支持可以换出的硬件模块.它们基本上都是相同的功能类别,但功能和功能各不相同.在启动时,我必须检测实际连接的硬件模块,并实例化相应的类.但我不希望使用该类的代码具有每个类的特殊知识; 我希望课程宣传它提供的功能.(有时,两个硬件模块将识别为相同的类型ID,但在功能探测器上,一个将指示另一个不具有的功能.)
正如任何中学数学学生都可以证明的那样,pi是不合理的。
但是:
Welcome to Racket v5.3.6.
> pi
3.141592653589793
> (rational? pi)
#t
Run Code Online (Sandbox Code Playgroud)
这是因为在基础机器的浮点格式中pi 的表示精度有限,因此始终可以表示为p / q,其中q为10 ^ n,n为表示精度吗?
如果是这样的话,那么,除了合理性之外,如何将球拍(或其他行为类似的计划)抛出的任何数字都视为非理性?因此,为什么还要烦恼该rational?功能呢?
更新:甚至(rational? (sqrt 3))报告#t
99.9% 的情况下,我在 vim 中关闭了换行。但在极少数情况下(通常是在查看生成的调试或构建日志时),会有一些非常长的行,我不想慢慢滚动。
是否有一个 vim 命令只能软包装当前行,并且可以通过另一个(或相同的)vim 命令快速撤消?我所说的“软包装”是指 vim 只会更改该行在屏幕上的视觉表示,而实际上不会在文件缓冲区中永久地分解它。
奖励:这条线可以暂时用不同的颜色,以使其开始和结束的位置更加明显吗?(我不使用行号,因为它们使 xterm 或 tmux 中的复制粘贴变得复杂。)
假设我尝试使用奇怪的重复模板模式创建自己的 boost::filesystem::path 实现:
g++ -std=c++11 -o mypath ./mypath.cpp(为简洁起见,代码不完整,但使用 GCC 4.8.4与“ ”编译时会出现所述问题)
mypath.hpp:
#ifndef MYPATH_HPP
#define MYPATH_HPP
#include <string>
#include <vector>
namespace my {
template <class T>
class PathBase
{
public:
PathBase();
PathBase(std::string const& p);
std::string String() const;
bool IsSeparator(char c) const;
std::string Separators() const;
typedef std::vector<std::string> pathvec;
protected:
pathvec _path;
private:
virtual std::string _separators() const =0;
};
class Path : public PathBase<Path>
{
public:
Path();
Path(std::string const& p);
private:
virtual std::string _separators() const final;
};
} // namespace …Run Code Online (Sandbox Code Playgroud) 在SO上有许多例子,人们已经问过如何最好地在bash中对一条路径进行绝对化,但是我还没有发现任何与绝对存在的绝对路径有关的问题.
cd $1 && pwd对于不存在的路径,该方法根本不起作用.
该readlink -f $1方法仅适用于一个不存在的水平; 也就是说,它适用于" ~/sdkjf",但不适用于" ~/sdkjf/qweuio"
理想情况下,我想要一种方法,将后者扩展为/home/username/sdkjf/qweuio......并且也会为./和../做类似的转换.
你能推荐一个解决方案吗?
c++ ×3
bash ×1
crtp ×1
git ×1
inheritance ×1
linux ×1
path ×1
polymorphism ×1
racket ×1
vim ×1