如何简化这个typedef不同的switch语句
How can I simplify this typedef different switch statement?
我正在对一个字符执行切换语句,通常'A'
和'a'
之间的唯一区别是我在特定结构中的某些静态常量和随机数字常量。这里有一个例子:
switch(someChar)
{
case 'A':
{
typedef structWithConstants<caseA, UPCASE> constantsT;
someStruct s;
s.bla = bla;
s.foo = getfoo7(rat+constantsT::rat);
s.other = getOther10(other + constantsT::other);
someFunctionBar(&s);
}
break;
case 'a':
{
typedef structWithConstants<caseA, LOWCASE> constantsT;
someStruct s;
s.bla = bla;
s.foo = getfoo3(rat+constantsT::rat);
s.other = getOther10(other + constantsT::other);
someFunctionBar(&s);
}
break;
}
所以在上面,从字面上看,在代码方面唯一的区别是使用的常数T和切换到三。。。有没有一种方法可以简化上面的重复代码?也许会破坏这两种情况之间的一些共同行为?
可以对一个函数进行模板化,为那些"foo"-s声明一个类型,然后将大小写模板参数传递给某个调用方函数
typedef int getfootype(char c);
template<getfootype f,char CASING>
void handle(char c)
{
typedef structWithConstants<caseA, CASING> constantsT;
someStruct s;
s.bla = bla;
s.foo = f(rat+constantsT::rat);
s.other = getOther10(other + constantsT::other);
someFunctionBar(&s);
}
switch(someChar)
{
case 'A':
handle<getfoo7,UPCASE>(someChar);
break;
case 'a':
handle<getfoo3,LOWCASE>(someChar);
break;
}
类似的东西:
switch(someChar)
{
case 'A':
case 'a':
{
typedef structWithConstants<caseA, UPCASE> constantsT_UP;
typedef structWithConstants<caseA, LOWCASE> constantsT_LO;
someStruct s;
s.bla = bla;
if (someChar == 'a')
s.foo = getfoo3(rat+constantsT_LO::rat);
else
s.foo = getfoo7(rat+constantsT_UP::rat);
s.other = getOther10(other + (someChar == 'a') ? constantsT_LO::other : constantsT_UP::other);
someFunctionBar(&s);
}
break;
}
但它看起来相当复杂。。。
将重复零件放置在switch
:之外
someStruct s;
s.bla = bla;
switch(someChar)
{
case 'A':
typedef structWithConstants<caseA, UPCASE> constantsT;
s.foo = getfoo7(rat+constantsT::rat);
break;
case 'a':
typedef structWithConstants<caseA, LOWCASE> constantsT;
s.foo = getfoo3(rat+constantsT::rat);
break;
}
s.other = getOther10(other + constantsT::other);
someFunctionBar(&s);
switch(someChar)
{
case 'A': case 'a' :
{
typedef structWithConstants<caseA, UPCASE> constantsT;
someStruct s;
s.bla = bla;
if(someChar == 'A')
s.foo = getfoo7(rat+constantsT::rat);
else if(someChar == 'a')
s.other = getOther10(other + constantsT::other);
someFunctionBar(&s);
s.foo = getfoo3(rat+constantsT::rat);
break;
}
相关文章:
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 如何将 if else 语句重写为 switch 语句
- Switch 语句(字符串)一直选择默认值,除非其为零
- C++ switch 语句:对案例进行分组,并针对每个案例给出特定的说明
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?
- 默认标签显然在 switch 语句中不起作用
- C++如何在 switch 语句中放置两个参数
- 如何在 c++ 中从 switch 语句返回不同类型的变量
- 在编译时自动生成用于稀疏数组索引的switch语句
- C++ Switch 语句中的数学运算
- 变量不能在 lambda 中隐式捕获,并且没有使用 switch 语句指定捕获默认值
- 在任何案例之前,在 switch 语句中的使用声明是否合法?
- 使用 switch 语句将不同的函数作为类属性分配 C++
- 为什么我的 switch 语句没有响应一半的情况?
- 如何从映射中获取值并在 C++ 的 switch 语句中使用它
- switch 语句导致发送两条消息
- C++ Switch 语句在中断后执行
- switch语句,两种类似情况不同
- switch 语句和对象隐式 int 转换
- switch 语句结束和下一条语句之间的时间是否具有确定性(与路径无关)