我目前的switch声明大约有300多行.我知道这不是它可以获得的巨大,但我确信有更好的方法来处理这个问题.
switch语句Enum用于确定与日志记录相关的某些属性.现在问题在于,很容易省略枚举值,并且不会给它一个值,因为它不在switch语句中.
是否有一个选项可以用来确保每个枚举都被使用并给定一组自定义值来完成它的工作?
编辑:
请求的代码示例:(这很简单,但显示我的意思.此外,还会存在具有以下值的枚举.)
internal void GenerateStatusLog(LogAction ActionToLog)
{
switch (ActionToLog)
{
case LogAction.None:
{
return;
}
case LogAction.LogThis:
{
ActionText = "Logging this Information";
LogText = "Go for it.";
break;
}
}
// .. Do everything else
}
Run Code Online (Sandbox Code Playgroud) 在我目前的项目中,我经常发现自己经常使用责任链模式(对我来说经常是3次),我想知道我是否对解决方案过于热心.具体来说,我一直在使用Apache Commons 链项目.因此,我对它如何将一些复杂的可互换的应用程序逻辑简化为更具凝聚力和组织性的整体印象深刻.然而,项目中的一些新人似乎很难"得到它".你有什么经历?你在实施中遇到了什么问题?
到目前为止,我注意到的唯一问题就是当你试图处理需要关闭的对象时.将这些对象存储在Context类中会在完成链的执行时产生痛苦.我能够使用Filters而不是Commands来解决这个问题,但它似乎有点不直观,因为你的close语句通常离实例化对象的位置很远.
无论如何,我很想听到一些开发人员的想法,他们对我有这种模式的经验.
提前致谢.
我认为问题很常见.您有一些输入字符串,并且必须根据字符串的内容调用函数.类似于字符串的switch().考虑命令行选项.
目前我正在使用:
using std::string;
void Myclass::dispatch(string cmd, string args) {
if (cmd == "foo")
cmd_foo(args);
else if (cmd == "bar")
cmd_bar(args);
else if ...
...
else
cmd_default(args);
}
void Myclass::cmd_foo(string args) {
...
}
void Myclass::cmd_bar(string args) {
...
}
Run Code Online (Sandbox Code Playgroud)
并在标题中
class Myclass {
void cmd_bar(string args);
void cmd_foo(string args);
}
Run Code Online (Sandbox Code Playgroud)
所以每个foo和bar我都要重复四次(4次).我知道我可以先将函数指针和字符串提供给静态数组,然后在循环中进行调度,保存一些if ... else行.但是有一些宏技巧(或预处理器滥用,取决于POV),这使得有可能以某种方式定义函数,同时让它自动更新数组?所以我只需要写两次,如果内联使用,可能只写一次?
我正在寻找C或C++的解决方案.