gpt4 book ai didi

C++消息查找表(iostream)

转载 作者:行者123 更新时间:2023-11-28 08:04:19 25 4
gpt4 key购买 nike

在 C++ 中是否有一种简单的方法来拥有一个允许使用变量的消息查找表。

例如在 C 中你可以有这样的东西:

const char* transaction_messages[] = {
"UNAUTHORIZED",
"UNKNOWN_ORDER",
"UNKNOWN_DEALER",
"UNKNOWN_COMMODITY",
"INVALID_MESSAGE",
"BOUGHT %d %s @ %f.1 FROM %s", //amount, commodity, price, dealer
"SOLD %d %s @ %f.1 FROM %s", //amount, commodity, price, dealer
"%d HAS BEEN FILLED", //order id
"%d HAS BEEN REVOKED", //order id
"%d %s %s %s %d %f.1 HAS BEEN POSTED", //order id, dealer, side, commodity, amount, price
"%d %s %s %s %d %f.1" //order id, dealer, side, commodity, amount, price
};

然后在像这样的函数中使用它:

void myfunction(int amount, char* commodity, double price, char* dealer){

char *msg = transaction_message[6];
printf(msg, amount, commodity, price, dealer);
}

我希望能够对 ostream 执行相同的操作,而不必使用 << 运算符执行相同的操作:

ostream << "BOUGHT" << amount << " " << commodity << " @ " << price << " FROM " << dealer;

我现在能想到的唯一方法是有一堆返回字符串的内联函数,而不是有一个 char* 表,而是有一个查找内联函数的函数表。一定有更简单的方法。

最佳答案

您所做的与本地化 (AKA L10N) 非常相似。

有几个问题:Best way to design for localization of strings

但是有几个软件包已经处理了这个问题。
这些基本上旨在从您的应用程序中获取所有字符串并将它们打包在一个单独的资源中(在运行时选择正确的资源(通常取决于语言环境))。但是他们通常使用“英语”(或者我应该说非英语程序员的原始文本)作为查找文本以找到正确的资源字符串(因此代码仍然对开发人员可读)并且用户获得特定语言显示的字符串。

当然boost也有

但还有其他的(谷歌快速发现)

其他资源:

但是获得正确的字符串只是成功的一半。然后您需要正确地交换运行时值与字符串中的占位符。就个人而言,这是我认为的地方 boost::format真的很闪耀。

例子:

sprintf("The time is %s in %s.", time, country);

问题是名词和动词的顺序因语言而异。例如,如果我们翻译

"The time is 12:00 in Germany."

阿塞拜疆语

"Saat Almaniya saat 12:00 deyil."

您会注意到“德国”(Almaniya) 一词与时间互换了位置。因此,以特定顺序替换项目的简单任务是行不通的。您需要的是索引占位符。 (boost::format 来拯救)。

std::cout << boost::formt("The time is %1 in %2.") << time << country;
// Notice the place holders are number '%1' means the first bound argument
// But the format string allows you to place them in any order in the string
// So your localized resource will look like this:

std::cout << boost::formt("Saat %2 saat %1 deyil.") % time % country;

或者更有可能:

std::cout << boost::formt(I10N.get("The time is %1 in %2.")) % time % country;

关于C++消息查找表(iostream),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603635/

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