相关疑难解决方法(0)

C++预处理器:避免代码重复成员变量列表

我有一个多个类,每个类都有不同的成员变量,这些变量在构造函数中被简单地初始化.这是一个例子:

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)

c++ templates arguments c-preprocessor

60
推荐指数
2
解决办法
3万
查看次数

迭代C++中的结构

我有一个结构

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++中完成?

c++ struct

30
推荐指数
5
解决办法
4万
查看次数

有没有办法在 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)

c++

7
推荐指数
1
解决办法
176
查看次数

在模板函数中打印任何结构

我有 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)

任何机构帮助我?

c++ templates struct

4
推荐指数
1
解决办法
1403
查看次数

标签 统计

c++ ×4

struct ×2

templates ×2

arguments ×1

c-preprocessor ×1