模板struct和模板函数有什么不同? 【修正一下】

ocean1004 2008-12-08 10:15:52

#include <iostream>
using namespace std;

template <int N>
void GetValueFunc(void* pData) { return; }

template <>
void GetValueFunc<0>(void* pData)
{ return; }

template <>
void GetValueFunc<1>(void* pData)
{ return; }

template <int N>
struct MyValue { static void GetValue(void* pData) { return; } };

template <>
struct MyValue<0>
{
static void GetValue(void* pData) { return; }
};

template <>
struct MyValue<1>
{
static void GetValue(void* pData) { return; }
};

int main()
{
void* lp;
GetValueFunc<0>(lp);
GetValueFunc<1>(lp);
MyValue<0>::GetValue(lp);
MyValue<1>::GetValue(lp);
return 0;
}


我的意思是GetValueFunc <1>(lp);这句会进入
template <>
void GetValueFunc <0>(void* pData)
{ return; }
按理说应该进入:
template <>
void GetValueFunc <1>(void* pData)
{ return; }
*******************
而MyValue <1>::GetValue(lp);这句却能进入
template <>
struct MyValue <1>
{
static void GetValue(void* pData){ return; }
};

第二个问题:
而且把main改成
int main()
{
void* lp;
GetValueFunc <0>(lp);
GetValueFunc <1>(lp);
for(int i = 0; i < 2; i++)
{
MyValue <i>::GetValue(lp);
}
return 0;
}
是不通过的。我知道模板是编译期决定的,i是运行期决定的,这里好像是不可能的。有高手有什么方法吗?
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2008-12-08
  • 打赏
  • 举报
回复
函数可以用全特化,而不能用偏特化。而类既可以用全特化也可以用偏特化。
yshuise 2008-12-08
  • 打赏
  • 举报
回复
#include "stdafx.h"

#include <iostream>
using namespace std;

template <int N>
void GetValueFunc(void* pData) { return; }

template <>
void GetValueFunc<0>(void* pData)
{ cout<<"000"<<endl;return; }

template <>
void GetValueFunc<1>(void* pData)
{ return; }

template <int N>
struct MyValue { static void GetValue(void* pData) { return; } };

template <>
struct MyValue<0>
{
static void GetValue(void* pData) { return; }
};

template <>
struct MyValue<1>
{
static void GetValue(void* pData) { return; }
};



int _tmain(int argc, _TCHAR* argv[])
{
void* lp = NULL;
GetValueFunc<0>(lp);
GetValueFunc<1>(lp);
MyValue<0>::GetValue(lp);
MyValue<1>::GetValue(lp);
return 0;
}


没有错。的确按照既定目标。VC2003测试!
taodm 2008-12-08
  • 打赏
  • 举报
回复
不可能用模板的。
ocean1004 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
建议你再换个编译器重新确认问题1.
问题2,用switch/case、查表法。或者重新确认你的设计是否真的符合需求。
[/Quote]
晕~~~我以为你们误解了。。。VS2008真的可以进去。。。。

第二个问题你说得很对,确实不符合需求,而且有很多其他方法可以代替~~~我已经改用其他方法了,但现在只是想了解一下。

这里主要是想让MyValue <i>::GetValue(lp);这样的调用形式统一,然后只有一个变量i来确定调用不同的函数。这样的情况有可能用模板吗?
ocean1004 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
建议你再换个编译器重新确认问题1.
问题2,用switch/case、查表法。或者重新确认你的设计是否真的符合需求。
[/Quote]
晕~~~我以为你们误解了。。。VS2008真的可以进去。。。。

第二个问题你说得很对,确实不符合需求,而且有很多其他方法可以代替~~~我已经改用其他方法了,但现在只是想了解一下。

这里主要是想让MyValue <i>::GetValue(lp);这样的调用形式统一,然后只有一个变量i来确定调用不同的函数。这样的情况有可能用模板吗?
taodm 2008-12-08
  • 打赏
  • 举报
回复
建议你再换个编译器重新确认问题1.
问题2,用switch/case、查表法。或者重新确认你的设计是否真的符合需求。

65,211

社区成员

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

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