是否有更有效或更高效的方法来编写冗长的文本?
Are there more effective or efficient ways to code lengthy texts?
我有一个应用程序会有很多冗长的工具提示。例如,我有代码,只有一个这样的工具提示,如下所示:-
//Less SSA (ATi-SSA) (as coded in a header)
std::string GetLessSSA_tt() {
std::string less_ssastr = "Less SSA = The amount after deducting the SSA from the ATI.";
less_ssastr.append("\n\nAs such reducing the amount used for calculation purposes");
//etc
return less_ssastr;
}
......
//Coded at various places not within the header
std::string tooltip = GetLessSSA_tt();
我认为头文件可能是最适合分离数据和代码的地方,并且可以避免数据重复。
我乐于接受有关将数据放置在何处的建议(我会排除 file/database,但由于需要更多编码和拥有数据,这些数据很少需要更新、遥远且可能容易被误用,例如文件可能被更改)。
真正的问题是文本存储的实际编码。会有相当可观的数量。上面的例子是 simplified/minimalist 一个较小文本的例子。将至少有 27 个主题(术语解释),这相当于使用示例方法到 27 个函数,每个可能至少有 5 行文本。
我猜 Arrays/deques/structures 都会增加重复。
我对预处理器 commands/macros 的了解和使用能力目前非常有限。我所有使用“#defines”的尝试都失败了。
我相信,也许是错误的,预处理器命令可能会限制可移植性(这不是真正的问题)。但是,我怀疑预处理器也许可以进行更多 efficient/effective 编码。
我要实现的目标的总结是
"to reduce the clutter
around the text strings to a minimum. Primarily their definition but also considering subsequent usage."
我会把它放在一个 C++ 文件中,应该使用简单的常量:
tooltip.h:
namespace Whatever
{
extern std::string const ToolTip1;
extern std::string const ToolTip2;
}
tooltip.cpp:
namespace Whatever
{
std::string const ToolTip1(
"some lengthy tooltip\n"
"with several lines"
);
std::string const ToolTip2(
"a shorter one"
);
}
如果您更喜欢函数:
tooltip.h:
namespace Whatever
{
std::string const& toolTip1();
std::string const& toolTip2();
}
tooltip.cpp:
namespace Whatever
{
namespace
{
std::string const ToolTip1(
"some lengthy tooltip\n"
"with several lines"
);
std::string const ToolTip2(
"a shorter one"
);
}
std::string const& toolTip1() { return ToolTip1; }
std::string const& toolTip2() { return ToolTip2; }
}
我不会将常量放入 header - 你首先在单个编译单元中乘以常量,依赖链接器发现相同的字符串我感到不舒服...
编辑:
考虑 MikeT 的评论和(拒绝)编辑:
tooltip.h:
namespace Whatever
{
extern char const* const ToolTip1;
extern char const* const ToolTip2;
}
tooltip.cpp:
namespace Whatever
{
char const* const ToolTip1 = "theToolTip";
char const* const ToolTip2 = "theToolTip";
}
用法:
// before:
// addToolTip(getToolTip1().c_str());
// now:
addToolTip(ToolTip1);
只要全局只有一个 header 文件包含(到一个源文件中,而不包含在其他 headers 中),就不会有问题将定义从 tooltip.cpp 文件移动到 header 文件并删除源文件。不过,我认为这是不安全的,因为一旦这一事实发生变化,这可能会导致链接器问题。按照我的建议将 header 和源文件分开可以防止现在和将来出现问题。
此外,它使得在编译时交换语言变得容易,我们可以简单地这样做:
gcc main.cpp, something.cpp, tooltip_en-GB.cpp -o theApplication # English translation
gcc main.cpp, something.cpp, tooltip_es-ES.cpp -o theApplication # Spanish translation
# ...
我有一个应用程序会有很多冗长的工具提示。例如,我有代码,只有一个这样的工具提示,如下所示:-
//Less SSA (ATi-SSA) (as coded in a header)
std::string GetLessSSA_tt() {
std::string less_ssastr = "Less SSA = The amount after deducting the SSA from the ATI.";
less_ssastr.append("\n\nAs such reducing the amount used for calculation purposes");
//etc
return less_ssastr;
}
......
//Coded at various places not within the header
std::string tooltip = GetLessSSA_tt();
我认为头文件可能是最适合分离数据和代码的地方,并且可以避免数据重复。
我乐于接受有关将数据放置在何处的建议(我会排除 file/database,但由于需要更多编码和拥有数据,这些数据很少需要更新、遥远且可能容易被误用,例如文件可能被更改)。
真正的问题是文本存储的实际编码。会有相当可观的数量。上面的例子是 simplified/minimalist 一个较小文本的例子。将至少有 27 个主题(术语解释),这相当于使用示例方法到 27 个函数,每个可能至少有 5 行文本。
我猜Arrays/deques/structures 都会增加重复。
我对预处理器 commands/macros 的了解和使用能力目前非常有限。我所有使用“#defines”的尝试都失败了。
我相信,也许是错误的,预处理器命令可能会限制可移植性(这不是真正的问题)。但是,我怀疑预处理器也许可以进行更多 efficient/effective 编码。
我要实现的目标的总结是
"to reduce the clutter
around the text strings to a minimum. Primarily their definition but also considering subsequent usage."
我会把它放在一个 C++ 文件中,应该使用简单的常量:
tooltip.h:
namespace Whatever
{
extern std::string const ToolTip1;
extern std::string const ToolTip2;
}
tooltip.cpp:
namespace Whatever
{
std::string const ToolTip1(
"some lengthy tooltip\n"
"with several lines"
);
std::string const ToolTip2(
"a shorter one"
);
}
如果您更喜欢函数:
tooltip.h:
namespace Whatever
{
std::string const& toolTip1();
std::string const& toolTip2();
}
tooltip.cpp:
namespace Whatever
{
namespace
{
std::string const ToolTip1(
"some lengthy tooltip\n"
"with several lines"
);
std::string const ToolTip2(
"a shorter one"
);
}
std::string const& toolTip1() { return ToolTip1; }
std::string const& toolTip2() { return ToolTip2; }
}
我不会将常量放入 header - 你首先在单个编译单元中乘以常量,依赖链接器发现相同的字符串我感到不舒服...
编辑: 考虑 MikeT 的评论和(拒绝)编辑:
tooltip.h:
namespace Whatever
{
extern char const* const ToolTip1;
extern char const* const ToolTip2;
}
tooltip.cpp:
namespace Whatever
{
char const* const ToolTip1 = "theToolTip";
char const* const ToolTip2 = "theToolTip";
}
用法:
// before:
// addToolTip(getToolTip1().c_str());
// now:
addToolTip(ToolTip1);
只要全局只有一个 header 文件包含(到一个源文件中,而不包含在其他 headers 中),就不会有问题将定义从 tooltip.cpp 文件移动到 header 文件并删除源文件。不过,我认为这是不安全的,因为一旦这一事实发生变化,这可能会导致链接器问题。按照我的建议将 header 和源文件分开可以防止现在和将来出现问题。
此外,它使得在编译时交换语言变得容易,我们可以简单地这样做:
gcc main.cpp, something.cpp, tooltip_en-GB.cpp -o theApplication # English translation
gcc main.cpp, something.cpp, tooltip_es-ES.cpp -o theApplication # Spanish translation
# ...