翻译结构初始值设定项中的 const 字符串
我正在使用一个大型代码库,它在结构初始值设定项中使用 const 字符串。我正在尝试通过 GNU gettext 用最短的时间翻译这些字符串。 是否有某种类型的转换运算符可以添加到 default_value 中,从而允许案例#1 工作?
#include <cstring>
template<int N> struct fixed_string
{
char text[N];
};
// Case #1
struct data1
{
char string[50];
};
// Case #2
struct data2
{
const char* string;
};
// Case #3
struct data3
{
fixed_string<50> string;
};
// A conversion helper
struct default_value
{
const char* text;
default_value(const char* t): text(t) {}
operator const char*() const
{
return text;
}
template<int M> operator fixed_string<M>() const
{
fixed_string<M> ret;
std::strncpy(ret.text, text, M);
ret.text[M - 1] = 0;
return ret;
}
};
// The translation function
const char* translate(const char* text) {return "TheTranslation";}
int main()
{
data1 d1 = {default_value(translate("Hello"))}; // Broken
data2 d2 = {default_value(translate("Hello"))}; // Works
data3 d3 = {default_value(translate("Hello"))}; // Works
}
I'm working with a large code base which uses const strings in structure initializers. I'm trying to translate these strings via GNU gettext with a minimal amount of time.
Is there some sort of conversion operator I can add to default_value which will allow Case #1 to work?
#include <cstring>
template<int N> struct fixed_string
{
char text[N];
};
// Case #1
struct data1
{
char string[50];
};
// Case #2
struct data2
{
const char* string;
};
// Case #3
struct data3
{
fixed_string<50> string;
};
// A conversion helper
struct default_value
{
const char* text;
default_value(const char* t): text(t) {}
operator const char*() const
{
return text;
}
template<int M> operator fixed_string<M>() const
{
fixed_string<M> ret;
std::strncpy(ret.text, text, M);
ret.text[M - 1] = 0;
return ret;
}
};
// The translation function
const char* translate(const char* text) {return "TheTranslation";}
int main()
{
data1 d1 = {default_value(translate("Hello"))}; // Broken
data2 d2 = {default_value(translate("Hello"))}; // Works
data3 d3 = {default_value(translate("Hello"))}; // Works
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
直接转换为data1怎么样?
进而:
What about direct conversion to data1?
and then: