C++函数的显式实例化
C++ Explicit Instantiation of a Function
我正在编写自己的库来取乐,但我遇到了一个问题。 这是我的代码。
#include "utility/memory.h"
using namespace libnate::utility;
template <class T>
void copy( T *src, T *dest, size_t size ) {
for( size_t i = 0; i < size; ++i ) {
dest[i] = src[i];
}
}
template void copy( int *, int *, size_t );
template <class T>
size_t resize_array( T *&array, size_t internal_size ) {
size_t nu_size = internal_size * 2 + 1;
T *tmp_array = new T[nu_size];
copy<T> ( array, tmp_array, internal_size );
delete [] array;
array = tmp_array;
return nu_size;
}
template size_t resize_array( int *&, size_t );
G++ 抱怨我的复制调用中存在某种模棱两可的调用。
这是输出。
njackson@glados:~/libnate$ make
cd src && make
make[1]: Entering directory `/home/njackson/libnate/src'
g++ -c -I../include memory.cpp
memory.cpp: In function ‘size_t resize_array(T*&, size_t) [with T = int, size_t = unsigned int]’:
memory.cpp:25:46: instantiated from here
memory.cpp:18:2: error: call of overloaded ‘copy(int*&, int*&, size_t&)’ is ambiguous
memory.cpp:18:2: note: candidates are:
memory.cpp:5:6: note: void copy(T*, T*, size_t) [with T = int, size_t = unsigned int]
../include/utility/memory.h:11:6: note: void libnate::utility::copy(T*, T*, size_t) [with T = int, size_t = unsigned int]
make[1]: *** [memory.o] Error 1
make[1]: Leaving directory `/home/njackson/libnate/src'
make: *** [_] Error 2
任何帮助,不胜感激。 谢谢。
从错误消息中似乎很明显,命名空间libnate::utility
包含一个名为 copy
的函数。由于您正在定义自己的语句,并且在代码的开头有一个using namespace libnate::utility
语句,因此会出现名称冲突。
我建议删除using namespace
语句。保留它可能会导致在代码中引入大量其他符号,将来可能会导致进一步的名称冲突。
如果你真的想保留该语句,要么使用 ::copy
来引用你自己的复制函数版本,要么只是将其重命名为 mycopy
或类似的东西。
另外,实际上不需要显式实例化 copy
函数(无论如何都不会导致问题)。 resize_array
使用您的copy
函数,因此将自动导致所需的实例化。
相关文章:
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 模板化类构造函数的模板实例化
- 何时需要实例化函数模板定义?
- clang:使用 O3 导出隐式实例化函数的符号
- 如何调用模板函数的每个实例化函数
- 使用泛型类型显式实例化函数模板
- 使用自动>decltype方法显式实例化函数
- MSVC 编译器实例化函数模板的默认定义,即使存在专用化
- 如何使用模板模板参数显式实例化函数
- 实例化函数模板的编译问题
- Lua到c++,用于实体修改的实例化函数
- 当类型参数为空时,无法实例化函数模板
- 调用实例化函数时发生链接器错误
- 实例化函数的多个模板并在运行时选择的通用解决方案
- 使用不完整类型显式实例化函数模板
- 实例化函数模板时出错
- 禁止使用迭代器形参实例化函数模板