小编Kla*_*aim的帖子

是否在C++跨平台应用程序中实现本地化文本的实践?

在当前的C++标准(C++ 03)中,关于文本本地化的规范太少,这使得C++开发人员在使用本地化文本时比以往更加艰难(当然,C++ 0x标准稍后会有所帮助).

假设以下场景(来自真正的PC-Mac游戏开发案例):

  1. 响应(实时)应用程序:应用程序必须将非响应时间最小化为"不明显",因此执行速度很重要.
  2. 本地化文本:显示的文本本地化为两种以上的语言,可能更多 - 不要指望固定数量的语言,应该易于扩展.
  3. 在运行时定义的语言:文本不应该在应用程序中编译(每种语言也没有一个应用程序),你在应用程序启动时获得所选的语言信息 - 这意味着某种文本加载.
  4. 跨平台:应用程序采用跨平台编码(Windows - Linux/Ubuntu - Mac/OSX),因此本地化文本系统也必须是跨平台的.
  5. 独立应用程序:应用程序提供运行它所需的所有内容; 它不会使用任何环境库或要求用户安装除操作系统之外的任何东西(例如大多数游戏).

在这种应用程序中,用C++管理本地化文本的最佳实践是什么?

去年我研究了这个,我唯一确定的是你应该使用std::wstringstd::basic_string<ABigEnoughType>操纵应用程序中的文本.我停止了我的研究,因为我的工作更多的"文本显示"的问题(在实时3D的情况下),但我想有管理的纯粹的C本地化的文本++不仅仅是这一点,"使用Unicode"的一些最佳做法.

所以,欢迎所有最佳实践,建议和信息(跨平台让我觉得很难)!

c++ localization

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

匿名名称空间中的对象是否隐式静态?

从C++ 11标准的角度来看,对象状态/属性之间是否存在技术差异:

namespace
{
   int foo;
   const int bar = 42;
}
Run Code Online (Sandbox Code Playgroud)

namespace
{
   static int foo;
   static const bar = 42;
}
Run Code Online (Sandbox Code Playgroud)


从这里的问题和答案我相信匿名命名空间中的对象是隐式静态的,但是有人告诉我它只是内部的链接,编译器不会把对象当作标记为静态的含义,如它将如何实现对象施工.所以我需要一些关于它真正含义的细节,如果匿名命名空间中有和没有静态之间存在差异.

c++ c++11

19
推荐指数
1
解决办法
8017
查看次数

如何将CMake中的QtMain与Qt5链接?

我将项目代码从Qt4升级到Qt5.它使用CMake.除了与Qt相关的一行Cmake命令外,转换得很好.我在目前的文档中找不到像

如何从CMake(与Qt5)链接QtMain?

这是转换我的项目的唯一缺失位.有人能指点我解释这个或解释如何用Qt5做这个吗?我的Qt4代码工作正常,但我找不到Qt5的Cmake宏.

编辑>这是我目前的CMake文件:https://bitbucket.org/klaim/aos_qt5/src/593c195c4c6889f6968d68fca018ef425783a063/tools/aosdesigner/CMakeLists.txt? at =wip_qt5

所有qt5必需的CMake宏已经设置正确我相信,唯一不起作用的是连接到QtMain什么都不做,正如预期的那样,因为应该有一个Qt5特定的方式来做它我找不到的Qt5文档.

您可以浏览文件历史记录以查看它如何与Qt4一起使用.

c++ qt cmake c++11 qt5

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

C++ 11 for循环是否允许新的或更好的优化?

在C++ 11中,我们现在可以:

void dosomething( std::vector<Thing>& things )
{
    for( Thing& thing : things )
    {
        dofoo( thing );
        wiizzz( thing );
        tadaa( thing );
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道lambda的添加和使用是语法糖,但它提供了有趣的优化机会.

for循环怎么样?它只是语法糖还是编译器可以优化某些情况,它不能或者用手写循环太难了?

c++ optimization for-loop c++11

18
推荐指数
2
解决办法
1277
查看次数

有没有办法在VS2012中编写make_unique()?

Herb Sutter提出了一个简单的实现make_unique():http://herbsutter.com/gotw/_102/

这里是:

template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}
Run Code Online (Sandbox Code Playgroud)

我的问题是可变参数模板还不是VS2012的一部分,所以我不能按原样使用这个代码.

有没有一种可维护的方法在VS2012中写这个不会涉及使用不同的args计数复制粘贴相同的函数?

c++ templates unique-ptr variadic-templates c++11

16
推荐指数
2
解决办法
6356
查看次数

即使有多核上下文,是否有任何std :: chrono线程安全保证?

首先,我假设调用std :: chrono的任何函数都保证是线程安全的(没有未定义的行为或竞争条件或任何危险的,如果从不同的线程调用).我对么?

接下来,例如在窗口上存在与多核处理器相关的众所周知的问题,其迫使时间相关系统的一些实现允许迫使特定核获得任何时间信息.

我想知道的是:

  1. 在标准中使用std :: chrono,是否有任何保证认为不应出现问题?
  2. 或者它是实现定义的
  3. 或者是否明确缺乏保证意味着在Windows上你最好总是从同一个核心获得时间?

c++ c++-standard-library c++11

14
推荐指数
1
解决办法
4315
查看次数

具有多行参数的宏功能?

在C++中,我需要定义一个宏.该宏将把参数作为代码的"块".

我们可以安全地使用几行代码作为宏函数的参数吗?

我问自己是否:

  1. 以下代码是否有效,由标准定义为有效,如"跨平台"?
  2. 是否有更好的方法来做同样的事情(我不能在那里使用模板函数,因为我需要上下文).

#define MY_MACRO( expr ) DOSOMETHING( (expr) ); DOANOTHERTHING( (expr) ); // etc...

int my_function() {
    int o = RandomNumber();
    MY_MACRO( 
        int k = AFunction();
        k++;
        AnotherFunction( k + o ); // here I need to keep the context of the call
    ); 
}
Run Code Online (Sandbox Code Playgroud)

我们不能使用仿函数,因为我们需要访问调用的上下文.我们不能使用lambda(snif),因为我们使用的是一个不提供它的旧编译器(我们无法更改它).

c++ macros

13
推荐指数
1
解决办法
7159
查看次数

C++ 11标准容器是"最终的"吗?

我们(应该)知道C++标准库容器,包括std :: string,并不意味着继承自.但是,C++ 98/03确实允许我们这样做,即使它导致了错误.

现在该std::string关键字可用,是否标记final了标准库容器,以防止使用它们的继承?

如果没有,为什么?

c++ stl std c++11

13
推荐指数
1
解决办法
562
查看次数

寻找一个免费的xsd方案编辑器

我正在寻找这里所有XML/XSD编辑器的免费替代品(这是相对昂贵的 - 至少对我而言).我完全找不到一个.

我需要它来允许我编辑xsd文件以帮助编写基于xml的语言规范.我需要它是可视化的,以帮助设计,使其清晰.其他功能对我来说不那么有趣.

有什么建议吗?

xml xsd editor

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

如何获取Groovy类的所有属性名称?

标题问一切:如何获取Groovy类的所有属性名称?

它甚至可能吗?我以为我可以使用类的集合语法,但它似乎不起作用.

java groovy dynamic

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