小编soh*_*hel的帖子

为什么qmap使用skiplist而不是ob rb-tree?

我觉得为什么QMap实现了跳过列表数据结构而不是rb-tree?有关并发数据结构和跳过列表优势的非常有趣的SO线程比rb-tree,优点和缺点.它确实是非常有用的链接,但QMap不是线程安全的,它不会进行任何互斥锁定,以便开箱即用同步访问.它需要包装或子类化.

对我来说,编写"手工制作"的滑雪列表而不是rb-tree并不简单,所以这也不是很明显.

在非线程安全的Qt容器的上下文中是否有任何kill-feature?

Tnx提前.

c++ qt red-black-tree qmap skip-lists

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

如何克服make_shared constness

我遇到了一些问题,无法确定什么是正确的解决方案.

以下是用于说明的代码示例:

#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>

class TestClass{
    public:
        int a;
        TestClass(int& a,int b){};
    private:
        TestClass();
        TestClass(const TestClass& rhs);
};

int main(){
    int c=4;
    boost::shared_ptr<TestClass> ptr;

//NOTE:two step initialization of shared ptr    

//     ptr=boost::make_shared<TestClass>(c,c);// <--- Here is the problem
    ptr=boost::shared_ptr<TestClass>(new TestClass(c,c));

}
Run Code Online (Sandbox Code Playgroud)

问题是我无法创建shared_ptr实例,因为make_shared获取并将TestClass构造函数的参数下传为"const A1&,const A2&,...",如下所示:

template<typename T, typename Arg1, typename Arg2 >
    shared_ptr<T> make_shared( Arg1 const & arg1, Arg2 const & arg2 );
Run Code Online (Sandbox Code Playgroud)

我可以用boost :: shared(new ...)或用于const引用的重写构造函数进行欺骗,但似乎不是应该的方式.

Thnx提前!

c++ boost shared-ptr

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

c ++模板代码顺序解析/ CRTP

有人可以提示一下编译器如何处理表达式,例如

class DerivedA: public ParentTemplateClass<DerivedA>{
}
Run Code Online (Sandbox Code Playgroud)

对于我来说它看起来像:

这个男孩的父亲是这个男孩的"儿子"

我的意思是,对于我来说,如何在不知道父类的确切"描述"的情况下完成DerivedA类的"解析"并不明显.似乎'它不能.所以必须在孩子之前处理父类,但在这种情况下,父母依赖于孩子......我就被困在那里.

是的,网上有一些文章描述了这种事情的用法,例如一篇关于好奇重复模板模式的文章( http://en.wikibooks.org/wiki/More_C++_Idioms/Curiously_Recurring_Template_Pattern),但这不是某种标准或附近的smth.必须有明确的行为描述,例如操作顺序不是吗?

答案:Thnx给大家.是的,向前推断类比对我来说似乎是合法的,可以阻止我的大脑受损.模板仍然是我的艺术状态因为它隐藏的子语言性质,我不能只是g ++ -E :)

c++ templates crtp

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

emacs不使用/ usr/share/fonts中的字体

无法在Debian Linux + fluxbox下赢得emacs字体大战.

应该提到我在fontconfig中绝对没有经验,所以我错过了一些明显的东西.

我试图在emacs下使用/ usr/share/fonts之类的系统字体,比如DejaVu,但没有运气.

我试过了:

1.提到很多资源命令

(set-default-font "DejaVu Sans Mono-12")
Run Code Online (Sandbox Code Playgroud)

对于我尝试过的几乎任何字体名称,都返回"Font not available".

2.

Shift+Mouse-Left-Click->Change Text Font ->
Run Code Online (Sandbox Code Playgroud)

给出了很少的可用字体列表,其中包含两个或三个不同的大小.

我试过了:

ln -s /usr/share/fonts ~/.fonts
Run Code Online (Sandbox Code Playgroud)

没别的了

4.尝试使用xset方法(在archlinux wiki上找到这样的方法并盲目测试):

cd /usr/share/fonts/truetype/ttf-dejavu
sudo mkfontdir
xset +fp /usr/share/fonts/truetype/ttf-dejavu
xset fp rehash
Run Code Online (Sandbox Code Playgroud)

没有

5.我甚至将emacs用于访问具有字体名称的目录:

2>&1 strace -f emacs-24.3.1 > ./t.txt
Run Code Online (Sandbox Code Playgroud)

grep -i font ./t.txt
Run Code Online (Sandbox Code Playgroud)

仅给出:

[pid 18809] writev(3, [{"b\1\6\0\17\0\1\0", 8}, {"XFree86-Bigfont", 15}, {"\0", 1}], 3) = 24
Run Code Online (Sandbox Code Playgroud)

并没有像〜/ .fonts或/ usr/share/fonts这样的目录

同时:

% fc-list|grep -c deja  
42
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?:( Mb我不明白一些主要想法?

更新:我使用opensoop -v监视我的笔记本电脑上使用emacs的路径(在os x下)获取字体,但这与Linux路径ofc没有任何关系:( …

emacs fonts

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

如何"跟踪"缺少的ctor初始化列表参数?

我相信每个人都有时间面对丑陋的事情.

问题是在类中添加一个字段并忘记扩展初始化列表,例如:

class T{
  private:
    field1;
    ...
    field10;
};

T::T( int speedValue ):
field1( Speed::MphToMps(speedValue) ),
field2( new OtherClass(14,5,15) ),
field3( PublicValueGenerator::generateNewFieldValue(0,15) ),
...,
field10( "unpredictable value" );
Run Code Online (Sandbox Code Playgroud)

如果赶时间我添加一些字段,比如newForgottenField,我不时会忘记设置初始值.正如我记得一些IDE可以给出一个提示,但是vim + addons是我的选择:)

所以MB有一些提示,以简化跟踪这样的情况下或拇指或粗鲁宏的一些规则,它会发出警告或编译时错误(这将是惊人的:))?你如何克服这个障碍?

最好的祝福

c++ constructor initialization

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