我有这些代码行。有没有办法让它看起来更优雅? 有 if-else 分支,分支内有冗余代码。寻找更好的写作。
if (resType.isa<FloatType>()){
std::vector<float> ident(adaptor.getOperands().size(), 0.0);
auto newReduce = rewriter.create<TestOp>(
op->getLoc(), retTypes, adaptor.getOperands(), op->getAttrs()[0].getValue().cast<IntegerAttr>(), rewriter.getF32ArrayAttr(ident));
} else if (resType.isa<IntegerType>()){
std::vector<int32_t> ident(adaptor.getOperands().size(), 0);
auto newReduce = rewriter.create<TestOp>(
op->getLoc(), retTypes, adaptor.getOperands(), op->getAttrs()[0].getValue().cast<IntegerAttr>(), rewriter.getI32ArrayAttr(ident));
} else{
return failure();
}
假设
getI32ArrayAttr
和 getF32ArrayAttr(ident)
返回相同的类型。
那么这看起来是一种简化,可能更容易阅读。
if (!resType.isa<FloatType>() && !resType.isa<IntegerType>()) {
return failure();
}
auto newReduce = rewriter.create<TestOp>(
op->getLoc(),
retTypes,
adaptor.getOperands(),
op->getAttrs()[0].getValue().cast<IntegerAttr>(),
resType.isa<FloatType>() ? rewriter.getF32ArrayAttr(ident) : rewriter.getI32ArrayAttr(ident));
getI32ArrayAttr
和getF32ArrayAttr
的函数签名可能会改变这个设计。但根据所提供的信息,这是我能做的最好的了。