小编Die*_*lla的帖子

如何重用ostringstream?

我想清除并重用ostringstream(和底层缓冲区),以便我的应用程序不必执行尽可能多的分配.如何将对象重置为初始状态?

c++ stl reset ostringstream

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

多图在矢量图上有什么优势?

如果我们可以创建矢量图或集合图,我不明白为什么存在多图.对我来说,唯一的区别是:

  • 使用equal_range在多重映射为获得一个关键的要素和载体,我们只需使用的地图[]运营商,拥有元素的矢量.
  • 使用multimap.insert(make_pair(key,value))在多重映射为添加元素和map_of_vectors[key].push_back(value)在载体的图谱.

那么为什么要使用multimap呢?对我来说,最好有一个向量而不是两个迭代器来获取一个键的所有值.

此问题也适用于vector和unordered_multimap的unordered_map.

c++ stl map multimap

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

C++的脚本语言

我在脚本语言方面有点生疏,只要它们最近像蘑菇一样突然出现:)

今天我认为有一种脚本语言与C++无缝对话会很好,也就是说,可以使用C++类,对我来说最重要的是,可以编译成C++或者一些DLL/.SO(加上它. h)这样我就可以将它链接到我的C++程序中并使用脚本定义或实现的类.

我知道我可以嵌入任何流行的脚本语言,如lua,ruby,python ......但是接口通常包含某种"eval"函数,用于评估提供的脚本代码.根据用于耦合C++和脚本语言的工具,脚本回调到C++的集成可能或多或少易于编写,但我没有看到任何实际上允许我编写独立模块的脚本语言作为.h和.so/dll暴露给我的程序(可能是生成C++代码的脚本语言).

你知道这样的工具/脚本语言吗?

提前致谢.

PD.我一直在思考Vala或Haskell的GHC.他们生成C,但不生成C++ ......

c++ scripting scripting-language

39
推荐指数
6
解决办法
4万
查看次数

用C或C++实现插件系统

有关实现插件样式系统的提示有哪些?

c c++ plugins

31
推荐指数
6
解决办法
3万
查看次数

使用TeX/LaTeX学习的书籍的源代码

前段时间,在阅读这篇文章后,我发现了一个很好的形象,并指向了一本名为"Thinking Forth"的更好的书.令我惊讶的是,该书的LaTeX资源已准备好下载,珍珠如下:

%% There's no bold typewriter in Computer Modern.
%% Emulate with printing several times, slightly moving

\newdimen\poormove
\poormove0.0666pt
\newcommand{\poorbf}[1]{%
\llap{\hbox to \poormove{#1\hss}}%
\raise\poormove\rlap{#1\hss}%
\lower\poormove\rlap{#1\hss}%
\rlap{\hbox to \poormove{\hss}\hbox{#1}}%
#1}

%\let\poorbf=\textbf
\renewcommand{\poorbf}[1]{{\fontencoding{OT1}\fontfamily{cmtt}\fontseries{b}\selectfont#1}}
Run Code Online (Sandbox Code Playgroud)

其中它可以模拟没有它的字体的粗体描边.自从阅读以来,我没有意识到\llap这一点,但现在我可以用它们来定义盒子等.

所以,我的问题是双重的:

  1. 您是否知道在有用的配方方面显示相对高级使用TeX/LaTeX的网站,以及
  2. 您是否知道任何提供TeX/LaTeX来源检查和学习的书籍(并且值得这样做)?

latex open-source typography tex

17
推荐指数
2
解决办法
5387
查看次数

boost中的数值范围迭代器?

我知道boost中的范围迭代器,对于这个引用,似乎应该有一种简单的方法来做我想要的,但这对我来说并不明显.

假设我想表示一个数字范围,0到100(包括或不包括),比方说range(0,100).我想做的事情如下:

for_each(range<int>(0,100).begin(), range<int>(0,100).end(), do_something);
Run Code Online (Sandbox Code Playgroud)

哪里do_something是仿函数.这个迭代器不应该有一个下面的向量或类似的东西的开销,但只提供一个整数序列.这是否可以通过boost中的范围实现来实现?可以使用普通的标准STL迭代器吗?

c++ boost iterator stl range

13
推荐指数
3
解决办法
3935
查看次数

标记的类层次结构并在解析器中检查它们的类型

我正在尝试编写一个可重用的解析库(为了好玩).

我写了一个Lexer生成序列的类Tokens.Token是子类层次结构的基类,每个子类表示不同的标记类型,具有自己的特定属性.例如,有一个子类LiteralNumber(从导出Literal,并通过它从Token),其具有用于处理其词位的数值其自身特定的方法.一般处理词位的方法(检索它们的字符串表示,源中的位置等)在基类中Token,因为它们对所有标记类型都是通用的.此类层次结构的用户可以为我未预测的特定令牌类型派生自己的类.

现在我有一个Parser类来读取标记流并尝试将它们与其语法定义相匹配.例如,它有一个方法matchExpression,该方法又调用matchTerm并调用此方法,该方法matchFactor必须测试当前标记是否为(Literal或者Name都是从Token基类派生的).

问题是:
我现在需要检查流中当前令牌的类型是什么,以及它是否与语法匹配.如果没有,抛出EParseError异常.如果是,则相应地采取行动以在表达式中获取其值,生成机器代码,或者在语法匹配时执行解析器需要执行的任何操作.

但是我已经阅读了很多关于在运行时检查类型并且从中做出决定,这是一个糟糕的设计™,它应该被重构为多态虚拟方法.当然,我同意这一点.

所以我的第一次尝试是typeToken基类中放置一些虚方法,这将被派生类重写并返回一些enum类型为id的类.

但是我已经看到了这种方法的缺点:从Token他们自己的令牌类派生的用户将无法添加额外的id enum,这是在库源中!: - /目标是允许他们在需要时扩展新类型令牌的层次结构.

我也可以stringtype方法中返回一些,这样可以轻松定义新类型.

但是,在这两种情况下,基本类型的信息都会丢失(只有叶子类型从type方法返回),当有人从它派生并且覆盖它以返回其他内容时,Parser类将无法检测Literal派生类型type"Literal".

当然,这个Parser类也是用户扩展的(也就是说,编写自己的解析器,识别自己的标记和语法)并不知道Token将来会有什么类的后代.

许多有关设计的常见问题解答和书籍建议在此场景中采用需要按类型决定的代码中的行为,并将其放入派生类中的虚拟方法覆盖中.但我无法想象如何将这种行为放入Token后代,因为例如,生成机器代码或计算表达式不是他们的业务.此外,语法的某些部分需要匹配多个令牌,因此没有一个特定的令牌可以将该行为放入其中.这是特定语法规则的责任,它可以匹配多个令牌作为其终端符号. …

c++ parsing types class-design tokenize

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

tr1 :: hash for boost :: thread :: id?

我开始使用命名空间中的unordered_settr1来加速对普通(基于树的)STL的访问map.但是,我想在boost(boost::thread::id)中存储对线程ID的引用,并意识到这些标识符的API是如此不透明,以至于您无法清楚地获得它的哈希值.

令人惊讶的是,boost实现了tr1(包括hashunordered_set)的一部分,但它没有定义能够散列线程ID的哈希类.

查看boost::thread::id我发现的文档,发现线程ID可以输出到流,所以我的哈希解决方案是:

struct boost_thread_id_hash
{
    size_t operator()(boost::thread::id const& id) const
    {
        std::stringstream ostr;
        ostr << id;
        std::tr1::hash<std::string> h;
        return h(ostr.str());
    }
};
Run Code Online (Sandbox Code Playgroud)

也就是说,序列化它,将哈希应用于结果字符串.但是,这似乎比实际使用STL效率低map<boost::thread::id>.

所以,我的问题:您是否找到了更好的方法?在boost和tr1中是否明显不一致而不强迫hash<boost::thread::id>类的存在?

谢谢.

c++ hash boost boost-thread unordered-set

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

使用pdfLaTeX在BibTeX中包装URL(忽略边距)

我正在使用breakurl包和带有pdfLatex和BibTeX的hyperref包来引用一个url.网址正在破坏,但不是根据我的边缘.我有什么方法可以让网址识别我的边距或强制换行?提前致谢.

码:

__CODE__可能是一种排列__CODE__;-)

任何帮助表示赞赏,不,这不是作业 - 个人兴趣:-)

url latex margin bibtex pdflatex

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

Emacs的模板引擎?

我已经看到了Emacs的不同模板引擎(包括yasnippet),但我想要的是一个不同的野兽.在你写作的时候,大多数模板引擎都会帮助你.我想要的更像是"文本生成器"而不是打字保护程序.我即将尝试实现它,但只是提出问题,看看你是否可以给我提示实现类似的类似的emacs包.

总结一下,我想要的是在文档中(在给定语言或文本格式的注释中)内嵌emacs-lisp代码以在标记内生成文本,并使用任何组合键更新它.例如,假设我想生成一些有点长且重复的LaTeX代码,但我可以使用一些变量进行参数化:

... rest of the normal text...
# (deftemplate my-repetitive-latex-code (parameter)
#   ("blah blah" parameter "more blah blah")
# 
# (defvar *latex-code-parameters* '("abc" "def"))
# 
# (apply-template #'my-repetitive-latex-code *latex-code-paramters*)
#
# START GENERATED TEXT
# END GENERATED TEXT
... rest of the normal text...
Run Code Online (Sandbox Code Playgroud)

我的想法是,当我"评估"评论的emacs-lisp代码时,系统将查找下一个START GENERATED TEXT标记,并插入评估所选代码的结果(即,包含带参数的文本abc然后def),类似于:

# START GENERATED TEXT
blah blah abc more blah blah
blah blah def more blah blah
# END GENERATED TEXT
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,一些模板引擎类似于Perl Text :: Template,它能够区分用Perl编写的位(使用标记),并将结果替换为内联,但在本例中,使用emacs-lisp作为编程语言.(例如,我使用Perl Text …

lisp emacs templates template-engine elisp

7
推荐指数
0
解决办法
902
查看次数