模板的疑问

ma100 2012-05-11 01:54:15
模板是静态链编的, 这点和运行是识别的虚函数不同, 那在下面的程序遍不过去的原因又是为何


template <typename T>
void fun(T a)
{
int a1;
string a2;

if ( a1 == a )
cout << "A1";
else if ( a2 == a )
cout << "A2";
}

int main()
{
int a1 = 3;
string a2 = "SF";
fun(a1);
fun(a2);
}


如果以人的思想看, 是能区分出来的, 那这个问题是编译器嫌麻烦还是另有深意.
我知道把这个模板偏特化一下, 偏出来2个模板就可以编译了,但难度这个技术是为了掩饰模板的缺点而诞生的?
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ma100 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
编译器不能和人脑相提并论的。电脑擅长的是重复繁杂的琐事,电脑只能够按照一定的规则来做,所以编译器不能够按照人的想法来,只有规定好规则后,它去执行即可。
[/Quote]
真的如此吗, 我在gcc下使用时
当类型不匹配的 情况如 int, double互相转换 与int, string互相转换就不一样, 一个是警告, 一个是error
但人为加一行判断, 警告就没了, error还在
if ( typeid(T) == typeid(int) )
...
else if ( typeid(T) == typeid(double) )
...
说明编译器可以知道这件事情
w346581442 2012-05-11
  • 打赏
  • 举报
回复
template <typename T>
void fun(T a)
{
int a1;
string a2;

if ( a1 == a )//怎么就等于了?
cout << "A1";
else if ( a2 == a )
cout << "A2";
}

int main()
{
int a1 = 3;
string a2 = "SF";
fun(a1);
fun(a2);
}



rendao0563 2012-05-11
  • 打赏
  • 举报
回复

template <typename T>
void fun(T v);

template <>
void fun(int v)
{
std::cout << "int" << << std::endl;
}

template <>
void fun(std::string v)
{
std::cout << "std::string" << << std::endl;
}

int main()
{
int a1 = 3;
string a2 = "SF";
fun(a1);
fun(a2);
}
W170532934 2012-05-11
  • 打赏
  • 举报
回复
编译器不能和人脑相提并论的。电脑擅长的是重复繁杂的琐事,电脑只能够按照一定的规则来做,所以编译器不能够按照人的想法来,只有规定好规则后,它去执行即可。
j8daxue 2012-05-11
  • 打赏
  • 举报
回复
fun参数是类型T,除非T能同时和int,string 做operator ==

64,648

社区成员

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

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