gcc -E 预编译模板类
2015-11-19 21:17
281 查看
gcc -E 预编译模板类
需要的文件数:
simple-> ls
app.cpp app.h make.sh temp.h type.h
simple->
1) type.h
simple-> cat type.h
2) temp.h
simple-> cat temp.h
3) app.h
simple-> cat app.h
4) app.cpp
simple-> cat app.cpp
5) make.sh
simple-> cat make.sh
6) 运行:
simple-> sh make.sh
iret = 3
sret = hello world
simple->
7) gcc -E app.h
需要的文件数:
simple-> ls
app.cpp app.h make.sh temp.h type.h
simple->
1) type.h
simple-> cat type.h
/// @file type.h /// @brief /// @author EastonWoo /// 0.01 /// @date 2015-11-19 #pragma once #define MACRO_JOIN( X, Y ) MACRO_DO_JOIN( X, Y ) #define MACRO_DO_JOIN( X, Y ) MACRO_DO_JOIN2(X,Y) #define MACRO_DO_JOIN2( X, Y ) X##Y
2) temp.h
simple-> cat temp.h
/// @file temp.h /// @brief /// @author EastonWoo /// 0.01 /// @date 2015-11-19 // #pragma once // 这个不能要, 因为这个文件相当于inline #include "type.h" #define SIGNAL_SIGNAL MACRO_JOIN(TSignal, SIGNAL_NUMBER) #if (SIGNAL_NUMBER != 0) template <SIGNAL_CLASS_TYPES> #endif class SIGNAL_SIGNAL { public: T3 add (T1 a, T2 b) { return (a + b); } private: T1 m_t1; T2 m_t2; T3 m_t3; }; #undef SIGNAL_SIGNAL
3) app.h
simple-> cat app.h
/// @file app.h /// @brief /// @author EastonWoo /// 0.01 /// @date 2015-11-19 #pragma once // TSignal1 #define SIGNAL_NUMBER 1 #define SIGNAL_CLASS_TYPES typename T1, typename T2, typename T3 #include "temp.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES // TSignal2 #define SIGNAL_NUMBER 2 #define SIGNAL_CLASS_TYPES typename T1, typename T2, typename T3 #include "temp.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES
4) app.cpp
simple-> cat app.cpp
/// @file app.cpp /// @brief /// @author EastonWoo /// 0.01 /// @date 2015-11-19 #include <stdio.h> #include <string> #include "app.h" int main(int argc, const char *argv[]) { TSignal1<int, int, int>* signal1 = new TSignal1<int, int, int>; int iret = signal1->add(1, 2); printf("iret = %d\n", iret); TSignal2<std::string, std::string, std::string>* signal2 = new TSignal2<std::string, std::string, std::string>; std::string sret = signal2->add("hello ", "world"); printf("sret = %s\n", sret.c_str()); return 0; }
5) make.sh
simple-> cat make.sh
#!/bin/bash - #=============================================================================== # # FILE: make.sh # # USAGE: ./make.sh # # DESCRIPTION: # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: YOUR NAME (), # ORGANIZATION: # CREATED: 11/19/2015 20:29 # REVISION: --- #=============================================================================== set -o nounset # Treat unset variables as an error g++ -std=c++0x app.cpp -o app && ./app
6) 运行:
simple-> sh make.sh
iret = 3
sret = hello world
simple->
7) gcc -E app.h
simple-> gcc -E app.h # 1 "app.h" # 1 "<built-in>" # 1 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "<command-line>" 2 # 1 "app.h" app.h:8:9: warning: #pragma once in main file #pragma once ^ # 1 "temp.h" 1 # 10 "temp.h" # 1 "type.h" 1 # 11 "temp.h" 2 template <typename T1, typename T2, typename T3> class TSignal1 { public: T3 add (T1 a, T2 b) { return (a + b); } private: T1 m_t1; T2 m_t2; T3 m_t3; }; # 14 "app.h" 2 # 1 "temp.h" 1 # 15 "temp.h" template <typename T1, typename T2, typename T3> class TSignal2 { public: T3 add (T1 a, T2 b) { return (a + b); } private: T1 m_t1; T2 m_t2; T3 m_t3; }; # 21 "app.h" 2
相关文章推荐
- Introducing IPython Notebook
- 【leetcode】Product of Array Except Self
- ural 1306. Sequence Median
- 极限学习机(Extreme Learning Machine)
- 一个优化的查找姓名首字母相同的方法
- AFNetworking用法及网络监测
- 最大闭合权图
- lintcode :Ugly Numbers 丑数
- Nasm org 理解
- MyEclipse + Tomcat 热部署问题
- 字符编码
- 匿名内部类的详解
- 第十周练习 1005 不容易系列之(3)—— LELE的RPG难题
- 【bzoj2683】 【bzoj1176】 分治
- NULL 设下的陷阱
- OC 知识点回顾
- POJ 3177 Redundant Paths 图的强连通
- params关键字
- Add Binary
- java中获取用户的输出信息