[英]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());
}
是。 预编译在编译之前进行。
您的编译器基本上会看到
class Clients
{
public:
Clients();
};
Clients::Clients()
{
//
}
但是你为什么要这样呢? 您是否尝试解决一些潜在问题? 我相信有更好的方法。
虽然绝对不推荐,但它是可能的。 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
请注意,您不应该向标头添加防护。
这段代码当然很糟糕。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.