template类的问题

adolthor 2009-01-28 10:30:44
我有一个模板类:template <typename T> class A {};
但是,我还需要一个A的普通类版本,怎么样定义?(也就是可以 A a 这样声明变量)
...全文
180 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingling1989r 2009-01-30
  • 打赏
  • 举报
回复
学习
genius_tong 2009-01-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Crob 的回复:]
用宏定义,如下, gcc 4.1.2下编译通过

#include <iostream>
using namespace std;

template <typename T> class A {};
#define A A <int>

int main()
{
A a;

cout < < "Hello world!" < < endl;
return 0;
}
[/Quote]


学习了!!
chin_chen 2009-01-29
  • 打赏
  • 举报
回复
其实,楼主的意思就是 A<typename> var;这样就可以了。
leboc 2009-01-28
  • 打赏
  • 举报
回复
mark~
lightnut 2009-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 adolthor 的回复:]
是设计模式的问题
我是想写成这样的代码:GraphicsDevice& graphDev = *(new GraphicsDevice <OPENGL>)
其中GraphicsDevice <OPENGL>是被特化的一个模板版本,普通类的GraphicsDevice是模板类GraphicsDevice <OPENGL>的基类
[/Quote]
====这样的设计很不爽, 需要重新考虑.


class Base
{
......
};

template <typename T>
class Derive: public Base
{
.........
};



waizqfor 2009-01-28
  • 打赏
  • 举报
回复
帮顶一下
adolthor 2009-01-28
  • 打赏
  • 举报
回复
是设计模式的问题
我是想写成这样的代码:GraphicsDevice& graphDev = *(new GraphicsDevice<OPENGL>)
其中GraphicsDevice<OPENGL>是被特化的一个模板版本,普通类的GraphicsDevice是模板类GraphicsDevice<OPENGL>的基类
mabo321 2009-01-28
  • 打赏
  • 举报
回复
不明白 LZ为什么要 A a这样??
既然A是模板,那就A<Type> a;不就行么???
adolthor 2009-01-28
  • 打赏
  • 举报
回复
我的意思是将A这个模板类特例化成一个普通类
yangkunhenry 2009-01-28
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
using namespace std;
namespace space1
{
template <typename T>
class A
{
T i;
public:
A(T t=1):i(t){cout<<"template"<<endl;}
};
}
namespace space2
{
class A
{
int i;
public:
A(int t=0):i(t){cout<<"no-template"<<endl;}
};
}
int main()
{
using namespace space2;
A a;
return 0;
}

这样可以吗?
Crob 2009-01-28
  • 打赏
  • 举报
回复
用宏定义,如下, gcc 4.1.2下编译通过

#include <iostream>
using namespace std;

template <typename T> class A {};
#define A A<int>

int main()
{
A a;

cout << "Hello world!" << endl;
return 0;
}
Crob 2009-01-28
  • 打赏
  • 举报
回复
如果是想特化,那就用特化,就不存在本贴的问题。
做为模板参数,T总是需要有一个指定类型的。
否则,脱是裤子放屁,请楼主三思。
谢谢
xiaoyisnail 2009-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 adolthor 的回复:]
是设计模式的问题
我是想写成这样的代码:GraphicsDevice& graphDev = *(new GraphicsDevice <OPENGL>)
其中GraphicsDevice <OPENGL>是被特化的一个模板版本,普通类的GraphicsDevice是模板类GraphicsDevice <OPENGL>的基类

[/Quote]

从语法规则上来讲是无法满足楼主的这个需求的
从设计的角度来看,楼主的设计是有问题的
Vitin 2009-01-28
  • 打赏
  • 举报
回复
这个应该做不到,语法限制了。一般都是按7楼的方式设计。

如果一定要这样做,只能做到这个程度:

class dummy
{};

template <typename T = dummy>
class A : public A<>
{};

template <>
class A<dummy>
{}; // 特化的基类

int main()
{
A<>& a = *(new A<int>); // 必须有<>
}
捕鲸叉 2009-01-28
  • 打赏
  • 举报
回复
typedef A<int> _A
可以吗?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧