gpt4 book ai didi

c++ - 如何使用模板而不是宏来创建具有动态数量函数的类

转载 作者:行者123 更新时间:2023-11-30 02:04:41 26 4
gpt4 key购买 nike

目前我正在创建一个带有 set 和 get 宏的基类。但我想添加更复杂的宏,但宏确实不利于调试,所以我想用模板来做,但我不知道是否有人知道我的书或链接。

我的实际问题要复杂得多,我只是创建了一个集合并获取示例来演示该问题。

作为一个简单的例子,请看:

#include <iostream>

#define SETGET_BEGIN(name) \
class name##Base { \
public: name##Base(){};

#define SETGET_VAR(type,name) \
protected: type name##_; \
public: void set##name(const type &_r) {name##_ = _r;} ; \
public: const type &get##name() const {return name##_; }; \

#define SETGET_END };

SETGET_BEGIN(MyClass)
SETGET_VAR(int,NrA)
SETGET_VAR(float,NrB)
SETGET_END

class MyClass : public MyClassBase {
public:
MyClass() : MyClassBase() {};
};

int main(int argc, char **argv) {
MyClass myclass;
myclass.setNrA(4);
return 0;
}

最佳答案

尽管宏不是 C++ 的最大特性,但由于范围问题、调试限制和其他可能出现的意外情况,它们确实偶尔会被使用。由于宏是文本替换器,它们的优势之一是可以像您的示例中那样使用文本输入创建代码。

我看不到您制作“动态”类的方法的附加值,但类似的方法可能可用于枚举值或其他重复代码的序列化或值检查。宏也可用于记录以获取文件名/行号/函数名/...

因此,正如 Gumik 已经评论的那样,我看不出如何使用模板来做到这一点。

关于c++ - 如何使用模板而不是宏来创建具有动态数量函数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com