【问题标题】:Enterprise Architect - Separate Code Generation header and implementationEnterprise Architect - 单独的代码生成标头和实现
【发布时间】:2017-11-14 02:56:59
【问题描述】:

我正在学习 Enterprise Architect,到目前为止它似乎是一个不错的工具。也就是说,我在代码生成方面遇到了问题。我希望将生成的代码分开,以便类声明位于 .h 文件中,实现位于 .cpp 文件中(模板类除外)。例如,我希望为某个类 Foo 生成的代码如下所示:

Foo.h

class Foo
{
    public:
        Foo();
        int GetSomeInt();
        void SetSomeInt(int a);

    private:
        int someInt;
}

Foo.cpp

Foo::Foo()
{
}

int Foo::GetSomeInt()
{
}


void Foo::SetSomeInt(int a)
{
}

相反,我得到了一个包含上述所有代码的头文件,当我尝试在所有链接在一起的多个文件中使用Foo 时,这显然会导致问题。如何告诉工具我需要单独的文件用于类声明和实现?

【问题讨论】:

  • 您并不想为每个类设置一个单独的翻译单元 (.cpp)。只要方法被标记为内联,您就可以在许多翻译单元中使用它们。请注意,由于您尚未提供实际生成的输出,因此无法判断它是否正常。
  • @VTT 公平点。我没有在我的模型中将任何内容标记为内联。对于简单的 getter/setter 方法,内联很好,但不可避免地会有一些我不希望内联的更复杂的方法。我将使用一些实际输出来更新问题。
  • @VTT 除非生成的 inline 关键字导致问题。
  • @CodingHero 在您的 C++ 代码生成选项中设置了什么?有源扩展集吗?
  • @πάνταῥεῖ 是的,还有?另请注意,post 中提供的代码不是生成的代码。

标签: c++ enterprise-architect


【解决方案1】:

在尝试响应 cmets 的一些进一步实验后,我发现了至少部分问题。我试图为其生成代码的原始建模类是一个模板类。然而,即使在删除模板之后,所有实现仍然在 .h 文件中生成。还生成了一个 .cpp 文件,但仅包含一个引用 .h 文件中内容的 using 语句。

创建新的建模类后,我发现“正常”行为实际上是我所期望的:类定义存储在 .h 文件中,实现细节存储在 .cpp 文件中。我还尝试创建一个模板类,然后删除该模板;行为再次符合预期。看来我一定对我原来的班级做了一些奇怪的事情,我还没有想出如何撤消。

感谢提供 cmets 的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2011-03-13
    • 1970-01-01
    • 2021-12-12
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多