V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nerif
V2EX  ›  问与答

在 C 中自己实现了一个栈数据结构,栈元素类型设置为 SElemType,使用的时候用 typedef 定义,比如 typedef int SElemType。现在要在一个程序中用两个栈,分别保存 int 和 float,请问该怎么办?

  •  
  •   nerif · 2020-07-20 14:16:47 +08:00 · 593 次点击
    这是一个创建于 1449 天前的主题,其中的信息可能已经有所发展或是发生改变。
    4 条回复    2020-07-21 21:21:24 +08:00
    ysc3839
        1
    ysc3839  
       2020-07-20 20:08:35 +08:00 via Android
    用宏来生成对应的 struct 和 typedef ?
    比如原来是这样的
    ```
    typedef int SElemType;
    struct my_struct
    {
    SElemType x;
    };
    ```
    现在可以改成
    ```
    #define DEF_MY_STRUCT(T) \
    typedef T SElemType_##T; \
    struct my_struct_##T \
    { \
    SElemType_##T x; \
    };

    DEF_MY_STRUCT(int);
    ```
    nerif
        2
    nerif  
    OP
       2020-07-21 17:06:41 +08:00
    @ysc3839 谢谢老哥,这种方法确实能在一定程度上解决问题,但还有一些问题无法解决。我定义了栈的一些操作函数,部分函数的参数类型为 SElemType,比如 Push(Stack *S, SElemType e)。如果用宏的方法,那含有 SElemType 类型参数的操作函数该如何实现,也像 struct 一样在宏里实现吗,那样宏就有点太长了
    ysc3839
        3
    ysc3839  
       2020-07-21 18:04:28 +08:00 via Android
    @nerif 是的,否则你得实现一个 variant 类型。因为不同数据类型编译出来的代码是不同的,你要同样的代码支持不同数据类型的话,只能把这些数据类型都塞到一个数据结构中。
    另外,如果条件允许的话,更建议直接使用 C++。必须用 C 的话也可以考虑使用第三方库。
    nerif
        4
    nerif  
    OP
       2020-07-21 21:21:24 +08:00
    @ysc3839 好的,谢谢老哥,看来我确实得考虑用 C++ 了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:18 · PVG 17:18 · LAX 02:18 · JFK 05:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.