InputIsType
方法是类的一部分,是OperatorBase
Caffe2中所有算子的基类。每个运算符都包含(除其他外)以下私有字段(在 中定义caffe2/core/operator.h
):
vector<const Blob*> inputs_;
vector<Blob*> outputs_;
这些是您的操作员的输入和输出。由于算子可以有多个输入和/或多个输出,它们都是向量。
该InputIsType
方法接受一个 input int idx
,它定义了要查看的输入 Blob(即InputIsType(0)
第零个输入 Blob,依此类推)并将该特定 Blob 的类型与 type 进行比较<T>
。这是使用类的IsType
方法完成的Blob
,该方法定义在caffe2/core/blob.h
:
/**
* Checks if the content stored in the blob is of type T.
*/
template <class T>
bool IsType() const { return meta_.Match<T>(); }
注意:这将T
类型与我们的 Blob 的类型相匹配。我不会详细说明它是如何工作的。让我们假设这会返回True
或False
根据需要返回。
因此,要检查 BlobA
是否具有 type int
,我们必须调用
A->IsType<int>();
但是,如本答案中所述,编译器不知道您是否要在<int>
此处使用模板,或者您是否要与<
(小于)符号进行比较。所以我们必须告诉编译器我们在这里使用模板,然后调用
A->template IsType<int>();
这同样适用于方法的情况:我们使用类型(我们之前定义的),InputIsType
而不是在此示例中使用,并调用向量的元素:int
T
IsType
idx
inputs_
inputs_.at(idx)->template IsType<T>();