C++ 通过define指令指定类名。可能的
我可以创建一个类并从外部源分配他的名字吗 例: 编辑:我的真实代码 (这样,在DUnit框架的XML输出中,我的测试名称是TestName,而不是DatabaseTest)C++ 通过define指令指定类名。可能的,c++,class,c-preprocessor,C++,Class,C Preprocessor,我可以创建一个类并从外部源分配他的名字吗 例: 编辑:我的真实代码 (这样,在DUnit框架的XML输出中,我的测试名称是TestName,而不是DatabaseTest) 对。预处理在编译之前进行 您的编译器将基本上看到 class Clients { public: Clients(); }; Clients::Clients() { // } 但你为什么想要这个?你有没有试图解决一些潜在的问题?我相信有更好的方法。虽然绝对不推荐,但这是可能的。C(或C++)预处
对。预处理在编译之前进行 您的编译器将基本上看到
class Clients
{
public:
Clients();
};
Clients::Clients()
{
//
}
但你为什么想要这个?你有没有试图解决一些潜在的问题?我相信有更好的方法。虽然绝对不推荐,但这是可能的。C(或C++)预处理器可以用指定的定义值替换任何名称,而不考虑其含义。毕竟,它们只是预处理器 假设您有这个头文件: 通用_类.h
class ClassName
{
public:
ClassName()
{
//
}
};
您可以获得此类的多个实例,如下所示:
#define ClassName Server
#include "generic_class.h"
#undef ClassName
#define ClassName Clients
#include "generic_class.h"
#undef ClassName
请注意,不应将防护装置添加到标题中
这段代码当然很糟糕。你至少应该在发布之前尝试一下——如果你这么做了,你可能会发现答案是肯定的,一般来说,你不应该这样做。事实上,这是行不通的。使用“ClassName”名称编译。@Stew实际上,它确实有效:不,它使用“Clients”名称编译:我正在尝试对我的单元测试进行泛化。我会用代码示例更新我的帖子。我会接受你的答案,很好的示例,但对我的案例不起作用。编译,但我的日志文件注册“CalpNeNeX”= /你能告诉我你是如何记录类名的,你在哪里做的?我不知道DUnit,但是可能是它自己直接读取类的名字,而不考虑C++预处理器正在做什么。毕竟,没有程序希望宏更改类的名称。您是否可以将类的名称记录在其构造函数中,从而忽略DUnit告诉您的内容?
class ClassName
{
public:
ClassName()
{
//
}
};
#define ClassName Server
#include "generic_class.h"
#undef ClassName
#define ClassName Clients
#include "generic_class.h"
#undef ClassName