gpt4 book ai didi

C++ 仿函数初始化

转载 作者:行者123 更新时间:2023-11-28 01:20:04 27 4
gpt4 key购买 nike

我无法理解以下代码示例中 {} 的用途。为什么不直接使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com