我有一个多个类,每个类都有不同的成员变量,这些变量在构造函数中被简单地初始化.这是一个例子:
struct Person
{
Person(const char *name, int age)
:
name(name),
age(age)
{
}
private:
const char *name;
int age;
};
Run Code Online (Sandbox Code Playgroud)
每个都有一个相关的print<>()功能.
template <>
void print<Person>(const Person &person)
{
std::cout << "name=" << name << "\n";
std::cout << "age=" << age << "\n";
}
Run Code Online (Sandbox Code Playgroud)
由于参数列表在四个位置复制,因此该代码容易出错.如何重写代码以避免重复?我想使用预处理器和/或模板.
例如,我可以使用X-args预处理器技术 - 类似这样的东西吗?
#define ARGUMENTS \
ARG(const char *, name) \
ARG(int, age)
struct Person
{
Person(LIST_TYPE_NAME_COMMA(ARGUMENTS))
:
LIST_NAME_INIT(ARGUMENTS)
{
}
private:
LIST_TYPE_NAME_SEMICOLON(ARGUMENTS)
};
template <>
void print<Person>(const Person &person)
{
LIST_COUT_LINE(ARGUMENTS)
} …Run Code Online (Sandbox Code Playgroud) 我有一个结构
typedef struct A
{
int a;
int b;
char * c;
}aA;
Run Code Online (Sandbox Code Playgroud)
我想迭代每个结构的每个成员并打印它的值.就像是:
void print_struct_value(struct *A)
{
for each member of struct A
cout << "struct name . member name" << "value";
}
Run Code Online (Sandbox Code Playgroud)
如何在C++中完成?
如果我有一个由 3 个双打组成的类对象;x、y 和 z,有没有办法在函数中循环它们?
例如
for(i in (x,y,z))
do something;
Run Code Online (Sandbox Code Playgroud)
我可以用显式转换做类似的事情,但我想知道是否有更优雅的解决方案。
class testc {
public:
double x, y, z;
testc(double x, double y, double z)
:x(x), y(y), z(z)
{}
};
int main()
{
testc omega(1, 2, 3);
cout << *(double*)&omega << " " << *((double*)&omega +1) << " " << *((double*)&omega +2);
}
Run Code Online (Sandbox Code Playgroud) 我有 3 个或更多 struct ,我希望我有一个函数来打印任何结构
例如 :
struct A
{
int a0;
string a1;
bool a2;
}
Run Code Online (Sandbox Code Playgroud)
和
struct B
{
CString b0;
double b1;
int b2;
string b3
}
Run Code Online (Sandbox Code Playgroud)
我想用相同的功能打印这个结构(A 和 B)
像这样 :
template<typename T>
inline void print(T)
{
std::cout << // I don't know what is write here....
}
Run Code Online (Sandbox Code Playgroud)
任何机构帮助我?