C++类模板问题

Banana5240 2011-10-25 04:19:12
问题不描述了,就是编译不过。

#include <iostream>

using namespace std;

template<int V>
class CType
{
};

template<>
class CType<1>
{
};

class CMyTmp
{
public:
bool Fun(int nVal)
{
CType<nVal> tmpObj;
return Foo(tmpObj);
}
private:
template<class T>
bool Foo(T& nVal);
bool Foo(CType<1>& nVal);
};

template<class T>
bool CMyTmp::Foo(T& nVal)
{
cout << "General Foo()" << endl;
return true;
}

bool CMyTmp::Foo(CType<1>& nVal)
{
cout << "Dongle WriteSnEx()" << endl;
return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
CMyTmp MyObj;

MyObj.Fun(1);
MyObj.Fun(2);

return 0;
}


编译环境VS2008,编译结果如下:

1>Test.cpp
1>h:\program records\test\test.cpp(23) : error C2971: 'CType' : template parameter 'V' : 'nVal' : a local variable cannot be used as a non-type argument
1> h:\program records\test\test.cpp(10) : see declaration of 'CType'
1> h:\program records\test\test.cpp(21) : see declaration of 'nVal'
...全文
84 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
秦剑 2011-10-25
  • 打赏
  • 举报
回复
不敢惹模版
vrace 2011-10-25
  • 打赏
  • 举报
回复
bool Fun(int nVal)
{
CType<nVal> tmpObj;
return Foo(tmpObj);
}

模板参数必须常量
qq120848369 2011-10-25
  • 打赏
  • 举报
回复
现在编译器能特化模板函数了。
iamnobody 2011-10-25
  • 打赏
  • 举报
回复

template<>
bool Fun<2>();




Banana5240 2011-10-25
  • 打赏
  • 举报
回复
已加分。谢谢!
再问个函数模板问题,

template<int V> bool Fun();

如果需要特化,怎么办?可是函数模板又不支持特化,但可以重写。如何能达到特化的效果,谁能给指点迷津啊?谢谢了。
Banana5240 2011-10-25
  • 打赏
  • 举报
回复
哎!!
菜鸟没分给了啊 我也想多给啊。。。。
Terenceliqiang 2011-10-25
  • 打赏
  • 举报
回复
nVal 是非类型参数 这类参数必须在编译期确定
pengzhixi 2011-10-25
  • 打赏
  • 举报
回复
甘草生气了,后果很严重
pengzhixi 2011-10-25
  • 打赏
  • 举报
回复
template<int V>
class CType
{
};

template<>
class CType<1>
{
};

class CMyTmp
{
public:
template<int nVal>bool Fun()
{
CType<nVal> tmpObj;
return Foo(tmpObj);
}
private:
template<class T>
bool Foo(T& nVal);
bool Foo(CType<1>& nVal);
};

template<class T>
bool CMyTmp::Foo(T& nVal)
{
cout << "General Foo()" << endl;
return true;
}

bool CMyTmp::Foo(CType<1>& nVal)
{
cout << "Dongle WriteSnEx()" << endl;
return false;
}

int main()
{
CMyTmp MyObj;

MyObj.Fun<1>();
MyObj.Fun<2>();
system("pause");
return 0;
}
healer_kx 2011-10-25
  • 打赏
  • 举报
回复
CType<nVal> tmpObj;
这里,这是个模板的基本问题,整数值只能是编译期常量才能作为参数。


healer_kx 2011-10-25
  • 打赏
  • 举报
回复
为什么模板相关问题分都这么低,问个指针什么的都那么多分?

64,690

社区成员

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

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