我观看了一段视频,视频中有人解释了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,您就会了解正在发生的事情。

如果没有,请阅读您喜欢的书中的静态变量。

09-30 15:48
查看更多