【发布时间】:2021-11-22 13:08:57
【问题描述】:
我想了解“<DataType>”在 C++ 中的用法。
据我了解,它是用于模板的语法,它使用指定的数据类型来专门化函数或类实例化。
来自python,我知道所有数据类型都定义为一个类(如果它不适用于C++,请纠正我),所以如果你在python中寻找int实现,你会发现:
class int:
@overload
def __new__(cls: Type[_T], x: str | bytes | SupportsInt | SupportsIndex | _SupportsTrunc = ...) -> _T: ...
...
根据参数重载哪个构造函数。那么为什么在 C++ 中它不使用 (dataType) 而不是 <dataType> 并根据参数的类型重载构造函数呢?
另外,我可以肯定地说,每次出现<DataType>,它肯定是一个模板吗?
一些例子:
std::vector<int> x;
std::vector< std::vector<int> >& someVar;
cv::Mat opencvMat;
int x = static_cast<int>(opencvMat.at<float>(i, 3) * frameWidth);
【问题讨论】:
-
来自 python,我知道所有数据类型根据定义都是一个类(如果它不适用于 c++,请纠正我) 这不适用于 C 或 C++。听起来你可以使用good C++ book
-
为什么一种语言和另一种语言做事不同?好吧,因为它们是不同的语言。向量是类模板,static_cast 和 .at(来自 opencvMat)是模板函数
-
如果你确定
<DataType>中的DataType是一个类型而不是一个变量,我认为说它是一个模板是很安全的。否则它可能是一个表达式。a<foo>b其中a<foo产生bool并且有一个运算符可以让您执行bool > decltype(b)。 -
@P Kramer,我没有问为什么它与 python 不同,我只是举了一个例子来问为什么不简单地使用重载(比如在 python 甚至 c 中)。无论如何,感谢您指出我的示例都是模板。