define指令的类名.可能的

Class name by define directive. Possible?

本文关键字:指令 define      更新时间:2023-10-16

我可以创建一个类并从外部源分配他的名称吗?

例如:

// 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()
{
    //
}

但你为什么想要这个?你想解决的根本问题是什么?我相信还有更好的方法。