怎么定义一个类似于宏定义的函数

猿码-偶滴老嘎 2015-08-31 11:48:41
struct info
{
int a;
}

#define _EMPTY(classname, str) (((classname)->str).length() > 0)

string str = "a";
info *p =。。。
if (_EMPTY(p, str))

类似于这个宏定义的功能,宏定义应该实现不了,我需要怎么定义一个函数才能实现呢?

可以实现吗 求教!
...全文
263 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的小游侠 2015-08-31
  • 打赏
  • 举报
回复
宏定义确实实现不了。 你想要的无非是通过字符串的key,获得对应的value.应该考虑用map来实现 。 不要用c语言的编程方式来干c++的活。
赵4老师 2015-08-31
  • 打赏
  • 举报
回复
楼主学习代码生成(Code Generation)技术正当时。
Saleayas 2015-08-31
  • 打赏
  • 举报
回复
运行时没有元数据,所以不管是宏还是函数都不可能的。 你需要自己添加 info 的信息。
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
仅供参考:
#pragma warning(disable:4786)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main () {
    wstring ws1,ws2;

    wcin.imbue(locale("chs"));
    wcout.imbue(locale("chs"));
    getline(wcin,ws1);
    getline(wcin,ws2);
    if (ws1.size()!=ws2.size()) {
        wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
        return 1;
    }

    map<wchar_t,wchar_t> m1,m2;
    int n=ws1.size();

    for (int i=0;i<n;i++) {
        if (m1.find(ws1[i])==m1.end() && m2.find(ws2[i])==m2.end()) {
            m1[ws1[i]]=ws2[i];
            m2[ws2[i]]=ws1[i];
        } else {
            if (m1[ws1[i]]!=ws2[i] || m2[ws2[i]]!=ws1[i]) {
                wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
                return 1;
            }
        }
    }
    wcout<<ws1<<L" 和 "<<ws2<<L" 对应"<<endl;
    return 0;
}
谢谢!!!
赵4老师 2015-08-31
  • 打赏
  • 举报
回复
仅供参考:
#pragma warning(disable:4786)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main () {
    wstring ws1,ws2;

    wcin.imbue(locale("chs"));
    wcout.imbue(locale("chs"));
    getline(wcin,ws1);
    getline(wcin,ws2);
    if (ws1.size()!=ws2.size()) {
        wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
        return 1;
    }

    map<wchar_t,wchar_t> m1,m2;
    int n=ws1.size();

    for (int i=0;i<n;i++) {
        if (m1.find(ws1[i])==m1.end() && m2.find(ws2[i])==m2.end()) {
            m1[ws1[i]]=ws2[i];
            m2[ws2[i]]=ws1[i];
        } else {
            if (m1[ws1[i]]!=ws2[i] || m2[ws2[i]]!=ws1[i]) {
                wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
                return 1;
            }
        }
    }
    wcout<<ws1<<L" 和 "<<ws2<<L" 对应"<<endl;
    return 0;
}
  • 打赏
  • 举报
回复
引用 3 楼 lovesmiles 的回复:
宏定义确实实现不了。 你想要的无非是通过字符串的key,获得对应的value.应该考虑用map来实现 。 不要用c语言的编程方式来干c++的活。
我现在就是这么弄的 参数多了麻烦
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
楼主学习代码生成(Code Generation)技术正当时。
请师老赵 推荐点学习资料啊

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧