当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]c++ 泛型函数有个问题[OK]
帖子发表于 : 2006-06-22 19:23 
头像

注册: 2006-06-03 16:49
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
我在头文件里声明个泛型函数: functions.h
namespace Test
{
// 泛型函数
// 交换指定数组 arr 中索引 i 和 j 处的值
template < class T >
void
swap( T* arr, int i, int j );
}

现在,加一个源文件: functions.cc
#include "./include/functions.h"

namespace Test
{
// 泛型函数
// 交换指定数组 arr 中索引 i 和 j 处的值
Test::
template < class T >
void
swap( T* arr, int i, int j )
{
T tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}

但是这样会报错说 template 怎么样怎么样;如果不写 template 关键字又说 T 未声明。我是不是只有在头文件中就把 swap 函数写好这一个选择呢?

谢谢!


最后由 ydong 编辑于 2006-07-12 1:09,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-06-24 9:03 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
应该是
template < class T >
void Test<T>::swap( T* arr, int i, int j )
{
}
记得好像是这样的


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-06-24 11:13 
头像

注册: 2006-06-03 16:49
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
从一个朋友那里证实了。模板定义不能分开,只能一次性写完


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-06-24 12:58 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
模板定义不能分开??


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-06-25 0:17 
头像

注册: 2006-06-03 16:49
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
就是说不能像一般的函数那样在头文件里声明,在源文件里实现。


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2006-06-25 19:25 
头像

注册: 2005-08-15 0:04
帖子: 1880
地址: 南7技校
送出感谢: 0 次
接收感谢: 0 次
好像是这样的,记得当年学习 c++的时候老师说过的,晕,都忘到爪哇国去了~


_________________
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn


页首
 用户资料  
 
7 楼 
 文章标题 : Re: c++ 泛型函数有个问题
帖子发表于 : 2006-06-26 11:30 

注册: 2006-06-26 11:27
帖子: 32
送出感谢: 0 次
接收感谢: 0 次
explicit instantiation...

otherwise, how can the compiler decides how much space allocated to 'T'?
ydong 写道:
我在头文件里声明个泛型函数: functions.h
namespace Test
{
// 泛型函数
// 交换指定数组 arr 中索引 i 和 j 处的值
template < class T >
void
swap( T* arr, int i, int j );
}

现在,加一个源文件: functions.cc
#include "./include/functions.h"

namespace Test
{
// 泛型函数
// 交换指定数组 arr 中索引 i 和 j 处的值
Test::
template < class T >
void
swap( T* arr, int i, int j )
{
T tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}

但是这样会报错说 template 怎么样怎么样;如果不写 template 关键字又说 T 未声明。我是不是只有在头文件中就把 swap 函数写好这一个选择呢?

谢谢!


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2006-06-26 12:55 
头像

注册: 2006-06-03 16:49
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
显式初始化?什么意思?


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2006-07-11 17:27 
头像

注册: 2006-05-23 13:35
帖子: 225
送出感谢: 0 次
接收感谢: 0 次
在对 C++98 乃至 C++03 的标准的实现过程中,几乎所有的 C++ 编译器都忽略了关键字 export 的实现(只有一个 compiler 实现了,但是叫什么一时忘了,反正用的人少)。没有实现 export 的结果就是 template member function 的实现必须要和类定义写在同一个文件中,这在 C++ Templates 中有详细说明(C++ Templates 中还举例了一种面对将来有可能普及的 export 关键字的适配方法)。要注意,是同一个文件中,并不是说一定要写成 inline 的形式,没有 export 是造成无法进行 template link 而不是其它的错误。


_________________
我的 BLOG 欢迎来踩!


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2006-07-12 1:07 
头像

注册: 2006-06-03 16:49
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
好的,谢谢


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译