Перевести generi c method C# на C ++ - PullRequest
0 голосов
/ 04 мая 2020

У меня есть метод generic c в C#:

public T GetComponent<T>() where T : Component {
    foreach (Component component in this.components)
        if (component is T c)
            return c;

    return default(T);
}

Я хочу перевести его на C ++:

template<typename T>
T* GameObject::getComponent() const {
    if (!std::is_base_of<Component, T>::value)
        return nullptr;

    for (auto i = this->components->begin(); i != this->components->end(); i++)
        if (typeid(*i) == typeid(T))
            return dynamic_cast<T>(*i);

    return nullptr;
}

Но, похоже, ни то, ни другое typeid dynamic_cast также не может работать с типами c. Как мне этого добиться?

РЕДАКТИРОВАТЬ:

Component* GameObject::getComponent(const type_info& type) const {
    for (auto i = this->components->begin(); i != this->components->end(); i++)
        if (typeid(*i) == type)
            return *i;

    return nullptr;
}

Возможное использование:

cg::SpriteRenderer2D* renderer = (cg::SpriteRenderer2D*)getComponent(typeid(cg::SpriteRenderer2D));

Единственная проблема заключается в том, что нет проверки если переданный тип получает Component. Также я не уверен, что мне нужно разыменовать i два раза, так что typeid(**i). Первый от iterator до Component*. Второй от Component* до Component. Или я храню список Component&.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...