C++之父 Bjarne Stroustrup表示设计库来扩充功能要好过设计更多的语法

一些库相关

stl

提供了线程安全环境,多种容器

但受SGI是为unix量身打造,win下移植性有影响,有俄国英雄弄了STLport

Boost

C++标准委员会库工作组发起,最新、最酷、最实用的技术,是不折不扣的“准”标准库

Loki

《Modern C++ Design》配套发行的C++代码库,使用了大量牛X到爆的模板技巧,对编译器的要求是很苛刻的

Loki的类大部分都是基于策略编程的,其中最主要的是CreationPolicy,它决定了怎样生成一个类实例,可选的有:

  • template class Alloc> struct CreateUsing; 在分配器分配的内存中生成实例,如
  • template struct CreateStatic 生成静态实例
  • template struct CreateUsingMalloc 使用malloc申请内存并在其中生成实例
  • template struct CreateUsingNew 使用new生成实例(默认)
class MyClass{
public:
    // 有默认构造
    MyClass(){;}
    // 显示自己所在的内存地址,用以区分是否是同一个对象
    void ShowPtr()
    {
        std::cout << this << std::endl;
    }
};
// 定义Singleton的MyClass
typedef Loki::SingletonHolder<MyClass> MyClassSingleton;
 
int _tmain(int argc, _TCHAR* argv[])
{
    // 通过Instance()静态方法取得MyClass实例
    MyClass& v = MyClassSingleton::Instance();
    v.ShowPtr();
    // MyClassSingleton::Instance()总是返回同一个MyClass实例
    MyClassSingleton::Instance().ShowPtr();
    return 0;
}

Gui

MFC

没啥多说的…

QT

WxWindows

WTL

基于ATL

开发COM轻量级供网络下载的可视化控件

GTK

C库 Gnome

一谈到 linux的GUI 。。。

KDE/Xfce/GNOME/Enlightenment

ibus/scim 兼容

X Window /Wayland

字体渲染 libfreetype,fontconfig提供一些选项(比如什么字体要开hinting,什么字体要开antialiasing

KDE用QT,C++,GTK+是C

KDE是德国人的,GNOME是老美的

C vs C++已经足以成为很多开发者做出选择的理由了,尽管QT的文档那么优秀

有时候用的人少,大概是因为:“Once in doubt, always is.”

用Linux的人,开发者和爱好者居多,开发桌面的人也是开发者居多,这就成了个怪圈

开发者开发桌面给开发者用,开发者觉得适合反馈给开发桌面的开发者让他觉得这很好很nice,然后他就继续开发一个适合给开发者用的桌面,然后普通用户一进入Linux世界就直接懵逼了,我只想要一个风格统一的界面啊,这一边配色和另一边配色不同是怎么回事,这个窗口和另一个窗口高度不一样是怎么回事,这图标这么丑是怎么回事,我TM装个程序也有分那么多格式,有些还直接没有安装包!所以KDE和gnome本质上没有区别

用linux的geek一般都挺守旧的,更早的软件有更多的核心拥护者,这些拥护者有间接影响了次一级的开发人员,到操作系统这一级就影响到普通用户的选择

这与商业化的软件是背道而驰的,商业软件以用户需求为驱动,而linux下大部分如gnome的软件以核心成员为驱动要素

gnome支持的社区越多发行版选择默认使用为桌面的也就越多自然用户也越多

2017-04,Ubuntu宣布下一个LTS用回GNOME,Unity 8暴毙

桌面环境的四分五裂,让开发者和商业产品无所适从,是Linux桌面系统式微的一个重要原因

优点

KDE:个性化程度高,自己配置好会十分高效,加上其基于Qt的图形库写出来的很漂亮,Dolphin文件管理器很强大,易于使用

GNOME:感觉是走极简风,各个部件十分统一,配色协调,使用GNOME Tweak配置好后也很不错,比KDE稳定

当然还有深度的系统