我可以创建一个类并从外部源分配他的名字吗?
例如:
// 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());
}
答案 0 :(得分:1)
是。预编译在编译之前进行。
您的编译器基本上会看到
class Clients
{
public:
Clients();
};
Clients::Clients()
{
//
}
但你为什么要这样呢?您是否尝试解决一些潜在问题?我确信有更好的方法。
答案 1 :(得分:1)
尽管绝对不推荐,但这是可能的。 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
请注意,您不应该在标题中添加警戒。
这段代码当然很糟糕。