如何用C++优雅地编写我的代码并减少冗余代码? [已关闭]

问题描述 投票:0回答:1

我有这些代码行。有没有办法让它看起来更优雅? 有 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();
}
c++
1个回答
1
投票

假设

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
的函数签名可能会改变这个设计。但根据所提供的信息,这是我能做的最好的了。

© www.soinside.com 2019 - 2024. All rights reserved.