gpt4 book ai didi

c++ - 一个类可以有将当前类作为参数的成员吗

转载 作者:行者123 更新时间:2023-11-28 01:26:28 24 4
gpt4 key购买 nike

我的问题很简单:你能不能有这样的东西:

class A {
B<A> member;
}

这是我的程序的一个非常简化的版本:

//Game.h

class Game{
std::vector<Player<Game>*> players;
}

//Player.h

template <typename T>
class Player{
std::vector<Card<T>> hand;
}

//Card.h
template <typename T>
class Card {
virtual void playCard(T& game);
}

最佳答案

std::vector<Player<Game>*> players;被解析,Game的定义尚未完成。因此Game将被视为不完整类型,直到它是。那么T=GamePlayerCard在各自的实例化中也不完整。

这本身不是问题。可以使用不完整的类型,但有一个禁止使用它们的情况列表(请参阅 https://en.cppreference.com/w/cpp/language/type#Incomplete_type 以获取引用列表)。

根据您对 Player 的定义和 Card它似乎不需要 T 的完整类型,但是这在很大程度上取决于您遗漏的代码,例如如果它们中的任何一个具有 T 类型的数据成员或类型取决于 T , 那么可能会有问题。

还有一个问题是std::vector是否可以接受不完整的类型作为模板参数。在 C++17 之前,这是不允许的,因为 C++17 至少在声明中是允许的(但不允许访问其成员)。无论如何,给定您的代码 Card<T>std::vector<Card<T>> hand;T=Game 实例化是完整的,因此载体不是问题。

(代码的发布方式,模板声明顺序中也有一个问题,我没有解决,因为我了解包含顺序和转发声明)

关于c++ - 一个类可以有将当前类作为参数的成员吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com