[问题]c++ 泛型函数有个问题[OK]
- ydong
- 帖子: 63
- 注册时间: 2006-06-03 16:49
[问题]c++ 泛型函数有个问题[OK]
我在头文件里声明个泛型函数: 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 函数写好这一个选择呢?
谢谢!
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 函数写好这一个选择呢?
谢谢!
上次由 ydong 在 2006-07-12 1:09,总共编辑 1 次。
- madoldman
- 帖子: 599
- 注册时间: 2006-02-27 20:19
- 来自: works system
- 联系:
- madoldman
- 帖子: 599
- 注册时间: 2006-02-27 20:19
- 来自: works system
- 联系:
- zhan
- 帖子: 1880
- 注册时间: 2005-08-15 0:04
- 来自: 南7技校
-
- 帖子: 32
- 注册时间: 2006-06-26 11:27
Re: c++ 泛型函数有个问题
explicit instantiation...
otherwise, how can the compiler decides how much space allocated to 'T'?
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 函数写好这一个选择呢?
谢谢!
- ectotherm
- 帖子: 225
- 注册时间: 2006-05-23 13:35
- 联系:
在对 C++98 乃至 C++03 的标准的实现过程中,几乎所有的 C++ 编译器都忽略了关键字 export 的实现(只有一个 compiler 实现了,但是叫什么一时忘了,反正用的人少)。没有实现 export 的结果就是 template member function 的实现必须要和类定义写在同一个文件中,这在 C++ Templates 中有详细说明(C++ Templates 中还举例了一种面对将来有可能普及的 export 关键字的适配方法)。要注意,是同一个文件中,并不是说一定要写成 inline 的形式,没有 export 是造成无法进行 template link 而不是其它的错误。