我有一个对象,这个对象中的每个成员变量都有一个名称,我可以通过调用get_name()获取它,我想要做的是按字母顺序连接成员变量的所有名称,然后做一些事情.例如:
class CXMLWrapper<class T> { public: CXMLWrapper(const char* p_name) : m_local_name(p_name) { } //skip the get_name(),set_name() and others private: string m_local_name; T m_type_var; } class object { public: object() : m_team("team"),m_base("base") { } public: CXMLWrapper<string> m_team; CXMLWrapper<string> m_base; ... }
我必须像这样硬编码:
object o; string sign = o.m_base.get_name(); sign += o.m_team.get_name();
解决方法
在普通C中执行此操作的一种方法,如果所有成员属于同一个类或从某个基类派生,则将使用函数的可变数量的参数.一个例子如下.
#include <stdarg.h> string concatenateNames(int numMembers,...) { string output; va_list args; va_start(args,numMembers); for(int i = 0; i < numMembers; i++) { MemberClass *pMember = va_arg(args,MemberClass*); output += pMember->get_name(); } va_end(args); return output; } class Object { public: MemberClass x; MemberClass y; MemberClass z; }; int main() { Object o; string sign = concatenateNames(3,&o.x,&o.y,&o.z); }
如果所有成员的类型不同,您可以查看C 11x:http://en.wikipedia.org/wiki/Variadic_Templates的可变参数模板,但我似乎无法找到其他方法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。