define指令的类名.可能的
Class name by define directive. Possible?
我可以创建一个类并从外部源分配他的名称吗?
例如:
// Something like this
#define ClassName Clients
class ClassName
{
public:
ClassName();
};
ClassName::ClassName()
{
//
}
编辑:我的真实代码(这样,在DUnit框架的XML输出中,我的测试名称是TestName,而不是DatabaseTest)
#define TestName DatabaseTest
namespace TestName
{
class TTest : public TTestCase
{
public:
__fastcall virtual TTest(System::String name) : TTestCase(name)
{
}
virtual void __fastcall SetUp();
virtual void __fastcall TearDown();
__published:
void __fastcall t1();
};
void __fastcall TTest::SetUp()
{
}
void __fastcall TTest::TearDown()
{
}
void __fastcall TTest::t1()
{
CheckEquals(1,0);
}
}
class TTestName : public TestName::TTest
{
};
static void registerTests()
{
Testframework::RegisterTest(TTestName::Suite());
}
虽然绝对不推荐,但这是可能的。C(或C++)预处理器可以用指定的定义值替换任何名称,而不关心它们的含义。毕竟,它们只是预处理器。
假设你有这个头文件:
generic_class.h
class ClassName
{
public:
ClassName()
{
//
}
};
您可以获得此类的多个实例,如下所示:
#define ClassName Server
#include "generic_class.h"
#undef ClassName
#define ClassName Clients
#include "generic_class.h"
#undef ClassName
请注意,不应向标头添加保护。
这个代码当然很糟糕
是。预处理发生在编译之前。
你的编译器基本上会看到
class Clients
{
public:
Clients();
};
Clients::Clients()
{
//
}
但你为什么想要这个?你想解决的根本问题是什么?我相信还有更好的方法。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- 函数名是c中该函数的第一条指令的地址吗
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 错误:无效的预处理指令 #i 的意思是 #if?
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 组装指令中乘法的下部和上部是什么
- 如何以静态代码分析友好的方式使用 #define 防护?
- C++相当于整数的 #define
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 预处理器指令:为什么使用#Define的标题文件标识符与标头文件名不同
- 是否有一种方法可以将变量列表传递给#Define指令,并导致其通过文字值替换字符串值
- 通过 #define 预处理器指令覆盖C++中的"endl"
- 我可以将 #define 指令与 :: 一起使用吗?为什么它不起作用?
- define指令的类名.可能的
- 使用Makefile编译的预处理器指令(#define)列表
- 如何在不同的项目中控制#define指令…
- Klocwork(或其他工具)能知道类型、typedefs和#define指令吗
- #ifndef #define 指令是什么意思