用宏实现模板功能

来源:互联网 发布:java yield在Runnable 编辑:程序博客网 时间:2024/06/06 13:13

前言

今天遇到一道作业, 让我想了很久. 这道题真奇葩, 已经被老师玩哭了^_^

我作出来一个结果, 不知道合不合老师的心意~~

题目

4.用宏实现模板功能,分别输出void main(){ADD(int)(1,2);ADD(float)(1.0f,2.2f);ADD(int)(10,20);ADD(char*)("hello","wolrd");}

测试工程

/// @file exam_x_x.cpp/// @brief /**4.用宏实现模板功能,分别输出void main(){ADD(int)(1,2);ADD(float)(1.0f,2.2f);ADD(int)(10,20);ADD(char*)("hello","wolrd");}*/#include <iostream>#include <limits>#include "MicroTemplate.h"using namespace std;void clear_cin();void main(){    ADD(int)(1,2);    ADD(float)(1.0f,2.2f);    ADD(int)(10,20);    ADD(char*)("hello","wolrd");    /** run result    ADD(int)(1,2) = 3    ADD(float)(1.0f,2.2f) = 3.2f    ADD(int)(10,20) = 30    ADD(char*)("hello","wolrd") = hellowolrd    */}void clear_cin(){    cin.clear();    cin.sync();}

MicroTemplate.h

// MicroTemplate.h: interface for the MicroTemplate class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_MICROTEMPLATE_H__D9D78E4F_0EE0_4768_9BA0_4C872F462072__INCLUDED_)#define AFX_MICROTEMPLATE_H__D9D78E4F_0EE0_4768_9BA0_4C872F462072__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#define ADD(x) fnAddAndPrintinline int fnAddAndPrint(int x, int y){    int Rc = x + y;    printf("ADD(int)(%d,%d) = %d\r\n", x, y, Rc);    return Rc;}inline float fnAddAndPrint(float x, float y){    float Rc = x + y;    printf("ADD(float)(%.1ff,%.1ff) = %.1ff\r\n", x, y, Rc);    return Rc;}inline char* fnAddAndPrint(char* x, char* y){    static char s_szBuf[4096] = {'\0'};    if (NULL != x)    {        strcpy(s_szBuf, x);    }    if (NULL != y)    {        strcat(s_szBuf, y);    }    printf("ADD(char*)(\"%s\",\"%s\") = %s\n", x, y, s_szBuf);    return s_szBuf;}#endif // !defined(AFX_MICROTEMPLATE_H__D9D78E4F_0EE0_4768_9BA0_4C872F462072__INCLUDED_)







0 0