簡體   English   中英

C ++,在結構的大型“typedef”中使用結構的“typedef”

[英]C ++, use a "typedef" of struct in a large "typedef" of struct

對於我的程序,我需要執行以下操作:

myObject.objectFunction(Process.MARKING);

為此,我想這樣做:

文件頭:

typedef struct _process
{
   string process_name;
   string party_involved;
} process;

typedef struct _PROCESS
{
    process MARKING;
    MARKING.process_name = "...";
    MARKING.party_involved = "...";

    process COLORING;
    COLORING.process_name = "...";
    COLORING.party_involved = "...";
    ...
} PROCESS;

但我無法編譯或更正錯誤。

我知道我可以使用附加到命名空間的宏,但我不喜歡使用“::”,而且我也知道這可能不是最好的編程方式。

我忘了補充一點,我還想讓struct常量的元素更大,即編譯后不可編輯,我還需要在頭文件之外使用較小結構(進程)的typedef

你能告訴我我錯在哪里,和/或更好的方法來做我想做的事嗎?

您實際上根本不需要typedef您的struct s - 它們是自動定義的類型。 但是,您確實在初始化時遇到了問題。 在 C++20 中,您可以使用指定的初始值設定項:

#include <string>

struct process {
    std::string process_name;
    std::string party_involved;
};

struct PROCESS {
    process MARKING{
        .process_name = "...",
        .party_involved = "..."
    };
    // same for COLORING
};

在 C++20 之前:

struct process {
    std::string process_name;
    std::string party_involved;
};

struct PROCESS {
    process MARKING{
        "...",
        "..."
    };
    // ...
};

如果您不希望任何其他對象被允許對這些成員變量進行更改,請將它們設為private並提供const&訪問器:

struct PROCESS {
    const process& getMarking() const { return MARKING; }

private:
    process MARKING{
        "...",
        "..."
    };
};

現在, myObject.objectFunction(Process.getMarking()); 無法更改它,必須通過值const&獲取對象:

struct Object{
    void objectFunction(const process& MARKING) {

    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM