`

宏(#define)定义函数妙用

    博客分类:
  • C++
阅读更多
关于这宏定义函数的用法,现在不是特别常见,但是在特殊情况下还是很有用的。

定义如下:
class StringBuilder
{
public:
    StringBuilder(const char8_t* str);
    virtual ~StringBuilder();
    ...

    virtual StringBuilder& operator<<(const char8_t* value) { return operator+(value); }
    virtual StringBuilder& operator<<(int8_t value);
    virtual StringBuilder& operator<<(int16_t value);
    virtual StringBuilder& operator<<(int32_t value);
    virtual StringBuilder& operator<<(int64_t value);
    virtual StringBuilder& operator<<(uint8_t value);
    virtual StringBuilder& operator<<(uint16_t value);
    virtual StringBuilder& operator<<(uint32_t value);
    virtual StringBuilder& operator<<(uint64_t value);
    virtual StringBuilder& operator<<(double value);
    virtual StringBuilder& operator<<(const void * value);
};


基本实现思路如下, (代码十分简洁明了)
#define OPERATOR_IMPL(Type, Formatter) \
    StringBuilder& StringBuilder::operator<<(Type value) \
    { \
        if ((mSize - mCount) < 64) \
        { \
            if (!grow(64)) \
            { \
                mCount = 0; \
                return *this; \
            } \
        } \
        mCount += blaze_snzprintf(mBuffer + mCount, mSize - mCount, "%"Formatter, value); \
        return *this; \
    }

OPERATOR_IMPL(int8_t, PRId8);
OPERATOR_IMPL(int16_t, PRIi16);
OPERATOR_IMPL(int32_t, PRIi32);
OPERATOR_IMPL(int64_t, PRId64);
OPERATOR_IMPL(uint8_t, PRIu8);
OPERATOR_IMPL(uint16_t, PRIu16);
OPERATOR_IMPL(uint32_t, PRIu32);
OPERATOR_IMPL(uint64_t, PRIu64);
OPERATOR_IMPL(double, "f");
OPERATOR_IMPL(const void *, "p");


现在回头看看以前的总结http://jacky-dai.iteye.com/admin/blogs/868376,从这里可以看出有的时候宏定义函数还是很好用的。
分享到:
评论

相关推荐

    常用宏定义#define

    8. **使用#undef取消宏定义**: 如果不再需要某个宏定义,可以使用`#undef`来取消它的定义。 总结来说,`#define`宏定义在C/C++编程中起着重要作用,能够提高代码的灵活性和可维护性。然而,由于宏定义在编译阶段...

    #define 宏定义的一些用法总结

    ### #define宏定义的一些用法总结 #### 一、引言 在C及C++编程中,`#define`是一个非常强大的预处理器指令,用于创建宏。宏可以在编译前阶段替代代码片段,提高代码的复用性与可维护性。本文将详细探讨`#define`的...

    #define和typedef的使用

    - **#define** 主要用于文本替换,既可以定义常量也可以定义函数式的宏。 - **typedef** 主要用于为已存在的类型起一个别名,提高代码的可读性和移植性。 - **#define 和 typedef 的选择**: - 当需要定义一个简单...

    C++/C 宏定义(define)中# ## 的含义

    ### C++/C宏定义(define)中#与##的含义及应用 #### 一、引言 在C++和C语言中,预处理器指令`#define`被广泛用于定义宏,这些宏可以包含简单的替换文本,也可以进行复杂的条件判断和参数处理。本文将详细介绍宏...

    const #define inline

    `#define`用于宏定义,它可以定义常量、函数或者进行条件编译。例如: ```cpp #define PI 3.1415926 #define MAX(a, b) ((a) &gt; (b) ? (a) : (b)) ``` `#define`的主要缺点在于其仅仅进行文本替换,没有类型检查,...

    C语言 #define用法集锦[修正版]

    除了简单的文本替换外,`#define` 还可以用来定义宏函数,即带有参数的宏。这种宏可以接收参数,并且根据这些参数执行特定的操作。 **示例:** ```c #define max(x, y) ((x) &gt; (y) ? (x) : (y)) ``` 上述代码定义...

    #define的使用技巧

    在C语言中,宏定义是使用预处理器指令#define实现的一种编译前文本替换机制。它在编译之前处理源代码,使得可以定义常量、实现内联函数以及防止头文件被重复包含等多种功能。下面详细说明标题和描述中提到的知识点。...

    #define——用法大全

    define 还可以用于定义宏和取消宏,例如: ```c #define PI (3.1415926) #undef PI ``` ### 7. 头文件的包含 define 还可以用于头文件的包含,例如: ```c #ifndef __headerfileXXX__ #define __headerfileXXX__...

    #ifndef #define #endif的用法

    2. **`#define`**: 定义一个宏,宏可以是一个简单的替换字符串,也可以是一个带有参数的宏定义。 ```cpp #define MACRO_NAME value ``` 3. **`#endif`**: 与 `#ifndef` 配对使用,表示条件编译的结束。 #### ...

    Freertos之系统配置宏定义解析

    此宏定义启用或禁用IDLE任务钩子函数。在启用的情况下,用户需要实现一个名为vApplicationIdleHook()的函数,该函数在IDLE任务中周期性地执行,可用于操作系统的功能扩展。 6. #define configUSE_TICK_HOOK 0 此宏...

    宏定义和函数调用的区别

    在现代编程实践中,倾向于使用函数调用来代替宏定义,除非在特定情况下宏定义能带来显著的性能优势。例如,在需要极致性能优化的实时系统或嵌入式系统中,适当的宏定义使用仍然是合理的。然而,即使在这种情况下,也...

    #define用法集锦.doc

    1. **简单的#define定义** `#define`常用于创建符号常量,比如`#define MAXTIME 1000`。这个定义将`MAXTIME`替换成数值`1000`,在代码中若出现`MAXTIME`,编译器会将其替换为`1000`。与`const`关键字定义的常量不同...

    #indef 与#define 区别于用法

    `#define` 是一个宏定义指令,用于定义宏。它可以用来定义常量、函数等。当预处理器遇到被 `#define` 定义的宏时,会将后续代码中的宏名替换为对应的定义。 #### 三、#ifndef 与 #define 的具体应用 ##### 1. 防止...

    C语言中const与#define的区别

    使用#define定义的宏变量实际上并没有内存地址,它们在预编译时就被替换成了相应的值,或者更准确地说是代码文本。因此,如果在代码中多次使用了#define宏,其替换出来的代码会多次出现在最终的程序中,这会导致最终...

    C语言中的内联函数(inline)与宏定义(#define)详细解析

    内联函数和宏定义在C语言中都是用来优化程序性能的工具,但它们在使用上有着本质的区别。内联函数提供了更加安全和可调试的代码替代宏定义,尤其是在需要兼顾性能和代码可读性的场景下。 内联函数是C++引入的概念,...

    #ifndef与#define及#endif_C语言_

    这里,`#ifndef MYHEADER_H` 检查 `MYHEADER_H` 是否已定义,如果没有定义,就执行到 `#define MYHEADER_H` 这一行,定义 `MYHEADER_H` 宏。当这个头文件第一次被包含时,`MYHEADER_H` 未被定义,因此宏会被定义,...

    C语言宏定义##连接符和#符的使用

    本文将详细介绍C语言宏定义中两个特殊符号的使用:连接符`##`和字符串化符`#`。 #### 连接符`##`(Concatenation Operator) 连接符`##`用于宏展开时合并两个或多个token为一个单一的token。这一特性在构建动态...

    define使用

    除了定义常量之外,`#define` 还可以用来定义函数式宏。这种宏可以接受参数,并在编译时进行替换。例如,下面定义了一个求两个数最大值的宏: ```c #define max(x, y) ((x) &gt; (y) ? (x) : (y)) ``` 需要注意的是,...

Global site tag (gtag.js) - Google Analytics