Nana是什么?

Nana 是一个跨平台的C++图形界面库,目前它支持 Windows 和 Linux(X11) 平台。 通过使用Nana提供的平台无关接口,可以使程序在所有支持的操作系统上运行。 Nana是一个免费的开源软件,以Boost Software License协议授权。 Nana是标准C++语言开发,使用了高级C++特性,例如模板,标准库,异常和RTTI,因此,它可以良好地支持VC2013, GCC/MinGW 和 Clang 这些标准C++编译器。

Nana项目的原则

Nana是一个现代C++程序库,这意味着用户可以自由地使用现代的C++特性,诸如Lambda,智能指针以及标准库。
该项目的主要目标是简化开发难度,提供直观的开发方法。例如,

老式的开发方法:

void my_callback(Widget* wdg, void* userdata)
{
        const char* str = (const char*)userdata;
        wdg->caption(str);
}

const char* str = new char[N];
strcpy(str, get_text());
button->callback(my_callback, (void*)str);
                                        
现代的开发方法:
auto str = get_text();
button.events().click([str,&button]
{
        button.caption(str);
});
                                        
显然,现代的方法更简便,而老式的方法是容易出错的,因为你不得不关心类型转换和资源管理的问题。

另一方面,Nana提供了简便的开发工具和精心设计的类型使复杂的问题简单化。例如界面的布局管理,Nana库只提供了一个接口精炼的工具类(class place)处理繁杂的布局管理。