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

V米尔坎

我的问题很简单:你能有这样的事情吗:

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);
}
用户10605163

std::vector<Player<Game>*> players;被解析,Game的定义还没有完成。因此Game将被视为不完整类型,直到它是。然后T=GameinPlayerCard在它们各自的实例化时也是不完整的。

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

从您的定义 forPlayer并且Card它似乎不需要完整的类型 for T,但是这高度依赖于您遗漏的代码,例如,如果它们中的任何一个具有类型的数据成员T或依赖于的类型T,则可能有一个问题。

还有一个问题是是否std::vector可以接受不完整的类型作为模板参数。在 C++17 之前这是不允许的,因为 C++17 至少在声明中是允许的(但不能访问其成员)。在任何情况下,鉴于您的代码Card<T>std::vector<Card<T>> hand;实例化时T=Game是完整的,因此向量不是问题。

(代码的发布方式,模板声明顺序中也存在一个问题,我没有解决这个问题,因为我知道包含顺序和前向声明)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以将self作为python中类方法的第一个参数传递吗

将当前类的实例作为参数发送给另一个

c ++一个类可以包含一个与它成为朋友的类成员吗?

一个类是否可以包含一个后来专门用于派生类的基类作为成员?

两个类将另一个类的成员函数作为朋友

将一个类作为参数传递给另一个类

我可以将类作为扩展添加到 Kotlin 中的另一个类吗?

一个类可以没有构造函数吗?

一个Java文件可以有多个类吗?

我可以在父类中有一个“受保护的”成员并在子类中继承它吗?

初始化一个具有另一个类对象作为成员变量的类

在同一个类的方法中将成员变量作为参数传递

如何使用另一个类的公共成员函数作为参数调用线程

我可以使用成员函数作为EnumWindows的第一个参数吗

是否可以将某个类的某些成员的访问权限限制为另一个类,而不是所有其他类的访问权限?

如何使用当前类模板作为另一个模板的模板参数?

将参数作为另一个 Python 类中的类方法的装饰器

将类的方法作为参数传递给C ++中的另一个类

将指针类方法作为参数传递给另一个类方法C ++

MongoDB C#创建一个函数,我可以将类型/类名作为参数传递给它

如果我将一个类作为子类,可以指定实例变量应为的某个子类吗?

新手问题:Java类具有一个成员变量,该成员变量是接口类型。有人可以澄清吗?

我可以有一个带有输入参数指南的打字稿类构造函数吗?

您可以在该类的成员函数内使用一个类吗?c ++

您是否可以创建一个没有Object作为其基类的类结构

调用类好友函数的类成员函数(所有同一个类)可能吗?

创建一个结构体作为枚举类成员

创建一个类实例作为另一个类的成员

我可以将一个对象调用到另一个类吗?