zoukankan      html  css  js  c++  java
  • C++中 export关键字的使用

    为了访问其他编译单元(如另一代码文件)中的变量或对象,对普通类型(包括基本数据类、结构和类),可以利用关键字extern,来使用这些变量或对象时;但是对模板类型,则必须在定义这些模板类对象和模板函数时,使用标准C++新增加的关键字export(导出/出口/输出)。例如:

    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”

  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/onlycxue/p/2828863.html
Copyright © 2011-2022 走看看