我想这样做:
函数(条件A?pa1:pa2,条件B?pb1:pb2,条件C?pc1:pc2);
在C风格的函数中,没有问题。但是如果func()是一个模板函数,编译器就会报错。 这里 pa1 和 pa2, ... 是不同的类并且有一个static 方法 - “convert()”。出于性能考虑,convert() 也被声明为内联。
如果模板不能解决这个问题,就会有一个很长的 if-else,如下所示。
if (conditionA) { typeA1 a; if (conditionB) { typeB1 b; if (conditonC) { C1 c; Function(a, b, c); } else { C2 c; Function(a, b, c); } } else { typeB2 b; if (conditonC) { C1 c; Function(a, b, c); } else { C2 c; Function(a, b, c); } } } else { typeA2 a; if (conditionB) { typeB1 b; if (conditonC) { C1 c; Function(a, b, c); } else { C2 c; Function(a, b, c); } } else { typeB2 b; if (conditonC) { C1 c; Function(a, b, c); } else { C2 c; Function(a, b, c); } } }
最佳答案
条件运算符的结果(即p ? a : b
中的a
和b
)必须相同类型。也就是说,你不能这样做:
predicate() ? 3.14 : "sdfsd"
确保您的 pa1
和 pa2
是兼容的类型(它们是相同的类型、继承自一种类型或转换为兼容的类型)。如果您确实有一个将这些类型转换为兼容类型的 convert
成员函数,那么为什么不直接使用:
conditionA ? pa1.convert() : pa2.convert()
最后,它不会太长。你已经写出了定义。保持通用并继续。
关于c++ - C++ 模板是否可以针对改进代码的条件执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426941/