动态读取变量

nicochang 2003-12-19 06:01:54
假设object是一个对象,里面有Name,Id,Number等成员变量。
var是一个变量
我想实现的是这样一种功能,比如var的值是Name,那么我就可以取得object.Name中的值
如果var的值是Id,那么我就可以取得object.Id中的值
也就是,我不想建立一个switch case 的映射,有没有办法实现
...全文
26 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
newegg2002 2003-12-20
  • 打赏
  • 举报
回复
to plainsong(短歌)
我太菜了,想就他的程序问大家几个简单的问题,希望大家给我解答一下,
我谢谢大家了,!@!!
1.我的编译器也是VC6.0的,可是加了#include<string.h>或者是#include <string>
using namespace std;
都不能构造string的对象.粘下来的贴子,只要有这样的语句,编译器就老提醒:没定义
2.定义变量的时候,std::string是不是随意的呢,我想应该不是啊,他是什么意思啊,

3.那个回车符为什么非得用std::endl,只用endl不也行吗,怎么就,不行啊,
还有就是,我有点小建议,上面的那个程序,main()函数忘了加返回语句
nicochang 2003-12-19
  • 打赏
  • 举报
回复
刚刚回来,谢谢大家,你们的意思是用模板来做,模板不是很熟悉,要去看看,看看能不能实现
实际上,问题是这样:有若干个lib,这些lib中都有很多的成员变量,有的有100多了,都是数据库中字段的映射,这一次需要解决的问题是,程序运行时其他的组件会传给我一个变量,这个变量的值就是某一个lib中的一个成员变量的名字,改动lib是不可能的,而用switch...case ,实现一方面太麻烦,另一方面如果lib变动,这也要作相应的修改
qhgary 2003-12-19
  • 打赏
  • 举报
回复
不是不可能,但是在C++中可能比较困难,因为它要求他们在类型上面至少要有共性,这在Java中,或者C#中就能够实现,因为他们都派生于某一特殊根类
glacierrr 2003-12-19
  • 打赏
  • 举报
回复
struct var
{
enum type;// { int, char, float.....}
union value
{
int iValue;
float lValue;
......
};
};
abitz 2003-12-19
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;

class test
{
public:
test(const string& name = string(), const string& id = string(),
const string& number = string())
: name_(name), id_(id), number_(number) { }
string name_;
string id_;
string number_;
};

void main()
{
size_t var;
string test::*members[] = { &test::name_, &test::id_, &test::number_ };
test a("liukai", "abitz", "100031100");
cin >> var;
cout << a.*members[var];
}
短歌如风 2003-12-19
  • 打赏
  • 举报
回复
首先要求Name、Id、Number等变量类型相同。下面假设是std::string类型:

#include<iostream>
#include<string>

class Foo
{
public:
std::string Name;
std::string Id;
std::string Number;
};

typedef std::string Foo::*var_t;
int main()
{
var_t Var;
Foo a,b;
a.Name = "a";
a.Id = "1";
a.Number = "123";
b.Name = "b";
b.Id = "2";
b.Number = "122";
Var = &Foo::Name;
std::cout << a.*Var << " " << b.*Var << std::endl;
Var = &Foo::Id;
std::cout << a.*Var << " " << b.*Var << std::endl;
Var = &Foo::Number;
std::cout << a.*Var << " " << b.*Var << std::endl;
std::cin.get();
}
langzi8818 2003-12-19
  • 打赏
  • 举报
回复
var是什么类型的变量你自己不知道吗?
不太知道楼主的意思
soyan 2003-12-19
  • 打赏
  • 举报
回复
把var定义为字符型变量,Name ,Id ,Number都存为字符型就可以了
antijpn 2003-12-19
  • 打赏
  • 举报
回复
首先你要确定var是什么类型的变量,如果这一点无法确定,后面的操作根本无法展开。

不用switch case那就要用if else了,更麻烦

65,189

社区成员

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

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