我有一个对象,这个对象中的每个成员变量都有一个名称,我可以通过调用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的可变参数模板,但我似乎无法找到其他方法.