我有一个模板函数可以根据typename
传递给它,就像这样:
template<typename T>
inline std::size_t get_component_type_id() noexcept
{
static_assert(std::is_base_of<Component, T>::value, "T must be of type Component.");
static size_t uniqueComponentId{__INTERNAL__::getUniqueComponentId()};
return uniqueComponentId;
}
当我打电话时get_component_type_id
with BaseClass
10次,我得到相同的id。效果很好。
但是,如果我将子类传递给该函数,我也想获得相同的 id。当我用ChildClass
,我得到了一个不同的ID。这是为什么?
这是因为模板的实例化一旦实例化,就与同一模板的第二次实例化无关。两者是独立的实体并拥有自己的静态变量。
PS:这是一个示例中发生这种情况的视频:CppCon 2015:Arthur O'Dwyer “来自第一原理的 Lambda:C++ 旋风之旅”” https://www.youtube.com/watch?v=WXeu4fj3zOs。该示例在 6:00 左右开始
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)