繁体   English   中英

类名由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());
}

是。 预编译在编译之前进行。

您的编译器基本上会看到

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM