分页: 1 / 1
[问题]c++ 泛型函数有个问题[OK]
发表于 : 2006-06-22 19:23
由 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;
arr = arr[j];
arr[j] = tmp;
}
}
但是这样会报错说 template 怎么样怎么样;如果不写 template 关键字又说 T 未声明。我是不是只有在头文件中就把 swap 函数写好这一个选择呢?
谢谢!
发表于 : 2006-06-24 9:03
由 madoldman
应该是
template < class T >
void Test<T>::swap( T* arr, int i, int j )
{
}
记得好像是这样的
发表于 : 2006-06-24 11:13
由 ydong
从一个朋友那里证实了。模板定义不能分开,只能一次性写完
发表于 : 2006-06-24 12:58
由 madoldman
模板定义不能分开??
发表于 : 2006-06-25 0:17
由 ydong
就是说不能像一般的函数那样在头文件里声明,在源文件里实现。
发表于 : 2006-06-25 19:25
由 zhan
好像是这样的,记得当年学习 c++的时候老师说过的,晕,都忘到爪哇国去了~
Re: c++ 泛型函数有个问题
发表于 : 2006-06-26 11:30
由 lovepolo
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;
arr = arr[j];
arr[j] = tmp;
}
}
但是这样会报错说 template 怎么样怎么样;如果不写 template 关键字又说 T 未声明。我是不是只有在头文件中就把 swap 函数写好这一个选择呢?
谢谢!
发表于 : 2006-06-26 12:55
由 ydong
显式初始化?什么意思?
发表于 : 2006-07-11 17:27
由 ectotherm
在对 C++98 乃至 C++03 的标准的实现过程中,几乎所有的 C++ 编译器都忽略了关键字 export 的实现(只有一个 compiler 实现了,但是叫什么一时忘了,反正用的人少)。没有实现 export 的结果就是 template member function 的实现必须要和类定义写在同一个文件中,这在 C++ Templates 中有详细说明(C++ Templates 中还举例了一种面对将来有可能普及的 export 关键字的适配方法)。要注意,是同一个文件中,并不是说一定要写成 inline 的形式,没有 export 是造成无法进行 template link 而不是其它的错误。
发表于 : 2006-07-12 1:07
由 ydong
好的,谢谢