我观看了一段视频,视频中有人解释了ECS系统如何在C ++中工作。
他包括以下代码,用于获取不同组件的ID。
inline std::size_t GetCompTypeID() {
static std::size_t lastID = 0;
return lastID++;
}
template<class T>
inline std::size_t GetCompTypeID() {
static std::size_t typeID = GetCompTypeID();
return typeID;
}
现在,当我传入一个int变量,一个char和一个int变量时,两个整数变量将产生相同的ID。
这是我不理解的部分。我知道模板通常仅在编译时被调用,但是我仍然调用该函数3次,因此也独立于我传递的实际类而将lastID增加1 3次。
为什么这样做?
最佳答案
您将实例化模板两次-一次int
一次,一次char
-一次int
实例化被调用两次。
这些实例化与任何其他具有静态变量的函数一样工作。
您的用例等效于此:
inline std::size_t GetCompTypeID() {
static std::size_t lastID = 0;
return lastID++;
}
inline std::size_t GetCompTypeID_int() {
static std::size_t typeID = GetCompTypeID();
return typeID;
}
inline std::size_t GetCompTypeID_char() {
static std::size_t typeID = GetCompTypeID();
return typeID;
}
int main()
{
std::size_t int_id1 = GetCompTypeID_int();
std::size_t char_id = GetCompTypeID_char();
std::size_t int_id2 = GetCompTypeID_int();
}
如果您了解为什么
int_id1 == int_id2
,您就会了解正在发生的事情。如果没有,请阅读您喜欢的书中的静态变量。