作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法理解以下代码示例中 {}
的用途。为什么不直接使用 cell_type(...)
而不是 cell_type{}(...)
?我只是在这里放了一个简化版本,希望能显示足够的上下文。原码在https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/RNN.cpp#L781如果您需要更多信息。
#define DEFINE_QUANTIZED_RNN_CELL(..., cell_type, ... ) \
...
# what's the purpose of {} in the following line? \
return cell_type{}( \
...); \
}
using quantized_lstm_cell_type = LSTMCell<QuantizedCellParams>;
DEFINE_QUANTIZED_RNN_CELL(..., quantized_lstm_cell_type, ...);
template <typename cell_params>
struct LSTMCell {
using hidden_type = std::tuple<Tensor, Tensor>;
hidden_type operator()(...) const override {
...
}
};
最佳答案
cell_type{}
构造 cell_type
的临时实例。假设 cell_type
公开了一个 operator()
,您需要一个实例来调用它 - 因此您不能简单地说 cell_type()
。例如
struct cell_type { void operator()() { } };
cell_type{}(); // OK, creates temporary instance and invokes it
cell_type(); // Creates temporary instance, but doesn't invoke it
我的猜测是 DEFINE_QUANTIZED_RNN_CELL
需要一个类型而不是一个实例,这就是它使用 {}
的原因。
关于C++ 仿函数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56811454/
我是一名优秀的程序员,十分优秀!