使用类作为模板类型

时间:2014-01-21 10:08:44

标签: c++ templates

!我正在制作一个枪模板,它应该是这样的:

template <Bullet>
class gun
{  



};

Bullet是一个将在其他文件中定义的类,我的问题是我如何在枪中使用这个子弹作为一种类型?我如何在其他类中使用类作为模板?我想要一点点解释! 感谢...!

这是我试图做的事情:

#include "Bullet.h"
#include <iostream>
using namespace std;
#define BulletWeapon1 100
#define BulletWeapon2 30
#define BulletWeapon3 50
enum Weapons
{
    Gun1,Gun2,Gun3

}CurrentWeapon;
template <class T=Bullet>
class Gun
{



};

int main()
{
    return 0;
}

1 个答案:

答案 0 :(得分:0)

如果您只需要Bullet内的gun课程,那么您就可以不使用模板:

class gun {
    Bullet x;
    // ...
};

否则,如果您想允许任何类但提供默认类Bullet,您可以使用:

template <class T = Bullet>
class gun {
    T x;
    // ...
};

特别是,如果您想确保T始终是Bullet的基类,您可以使用类型特征,例如{{3} }和std::enable_if


在旁注中,请尽量避免使用using namespace std;之类的语句,而是开始习惯使用std::前缀。当您遇到多个定义或奇怪的查找问题时,它会为您省去一些麻烦。

另外,尽量避免使用#define。这样:

#define BulletWeapon1 100
#define BulletWeapon2 30
#define BulletWeapon3 50

可以转换为:

const int BulletWeapon1 = 100;
const int BulletWeapon2 = 30;
const int BulletWeapon3 = 50;

最后请注意,在C ++ 11中,您可以使用enum class es,它比简单enum更安全类型:

enum Weapons { Gun1,Gun2,Gun3 } CurrentWeapon;

可以成为:

enum class Weapons { Gun1, Gun2, Gun3 } CurrentWeapon = Weapons::Gun1;