关于c/c++有些函数之前有export详解
2017-11-03 09:56
155 查看
为了访问其他编译单元(如另一代码文件)中的变量或对象,对普通类型(包括基本数据类、结构和类),可以利用关键字extern,来使用这些变量或对象时;但是对模板类型,则必须在定义这些模板类对象和模板函数时,使用标准C++新增加的关键字export(导出/出口/输出)。例如:
一般是在头文件中给出类的定义或全局函数的声明信息,而在代码文件中给出具体的(类成员函数或全局函数的)函数定义。然后在多个用户代码文件中包含该头文件后,就可以使用其中定义或声明的类和函数。头文件中一般不包含变量、结构和类对象的定义,因为这样可能会导致重复定义的编译错误。解决办法是,在某个代码文件中进行定义,在其他用户代码文件中用extern来引用它们。
但是对模板类型,则可以在头文件中,声明模板类和模板函数;在代码文件中,使用关键字export来定义具体的模板类对象和模板函数;然后在其他用户代码文件中,包含声明头文件后,就可以使用该这些对象和函数了。例如:
// out.h:(声明头文件——只包含out函数的声明信息)
// out.cpp:(定义代码文件——包含out函数的声明[通过include]和定义等全部信息)
extern int n; extern struct Point p; extern class A a; export template<class T> class Stack<int> s; export template<class T> void f (T& t) {……}
一般是在头文件中给出类的定义或全局函数的声明信息,而在代码文件中给出具体的(类成员函数或全局函数的)函数定义。然后在多个用户代码文件中包含该头文件后,就可以使用其中定义或声明的类和函数。头文件中一般不包含变量、结构和类对象的定义,因为这样可能会导致重复定义的编译错误。解决办法是,在某个代码文件中进行定义,在其他用户代码文件中用extern来引用它们。
但是对模板类型,则可以在头文件中,声明模板类和模板函数;在代码文件中,使用关键字export来定义具体的模板类对象和模板函数;然后在其他用户代码文件中,包含声明头文件后,就可以使用该这些对象和函数了。例如:
// out.h:(声明头文件——只包含out函数的声明信息)
template<class T> void out (const T& t);
// out.cpp:(定义代码文件——包含out函数的声明[通过include]和定义等全部信息)
#include <iostream> #include “out.h” export template<class T> void out (const T& t) {std::cerr << t;} //user.cpp:(用户代码文件——包含函数的声明头文件后就可以使用该函数) #include “out.h”
相关文章推荐
- c++关于函数的参数传递全部知识点详解
- 关于C++函数返回局部对象的详细分析
- 关于c++和C的getXXX系列函数
- C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- C++关于<queue>的一些函数
- C++中关于指向对象成员函数打指针例子
- (笔试题)关于C++的虚函数和多态性
- 关于c/c++中的isdigit()函数
- c++中关于数组作为函数参数的几种方法
- 关于C++成员函数指针的使用
- c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
- c++ java中关于protobuf反序列化对象实体和实体处理(函数)关系(二)
- 关于C++中inline函数
- 【C++总结】关于函数返回对象析构的问题
- cocos2dx关于在c/c++中调用lua函数
- c++ 关于类成员函数指针
- 关于c++中虚函数和接口的关系区分(简单)
- 关于c++的静态数据(函数)成员的理解
- 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
- 多玩YY语音的面试题:C++中如何在main()函数之前执行操作?