gpt4 book ai didi

c++ - 在 C++ 中的函数调用中声明静态变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:34 27 4
gpt4 key购买 nike

我有一个 C++ 程序,代码中有数千个字符串文字需要翻译,例如:

statusBar->Print( "My Message" );

我用一个函数包装了字符串文字,该函数在字典中查找值并返回翻译后的版本:

statusBar->Print( Translated( "My Message" ) );

问题是,在分析之后,我发现在整个代码中执行此查找是一个性能问题。我想做的是将这样的行更改为:

static const char * translatedMessage5 = Translated( "My Message" );
statusBar->Print( translatedMessage5 );

但是由于代码中有成千上万个这样的实例,它很容易出错(并且有点像维护噩梦)。我希望我可以将 Translated 变成一个内联声明静态变量的宏。这显然行不通。谁有更好的主意?

最佳答案

打印消息所需的 I/O 时间应该比任何字典查找时间多几个数量级。如果不是这种情况,则说明您做错了什么。

久经考验的软件可以满足您的需求。我建议你要么研究GNU Gettext ,它被所有其他 FOSS 项目使用,或者只是在您的程序中使用它而不是自制解决方案。

编辑:使用 C++0x 可以做你想做的事,但仍要考虑使用 GNU Gettext作为您真正的 l10n 引擎。下面是一些概念验证小代码:

#include <iostream>

const char* realTranslate(const char* txt)
{
std::cout << "*** translated " << txt << std::endl;
return txt; // use a real translation here such as gnu gettext
}

#define Translate(txt) \
(([]()->const char* \
{static const char* out = realTranslate(txt); return out;})())

int main ()
{
for (int i = 0; i < 10; ++i)
{
std::cout << Translate("This is a message") << std::endl;
std::cout << Translate("This is a message") << std::endl;
std::cout << Translate("This is another message") << std::endl;
}
}

我不确定真正的 C++ 标准将指定什么,但在 gcc-4.6 下,realTranslate() 函数被调用了 3 次。

关于c++ - 在 C++ 中的函数调用中声明静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com