簡體   English   中英

有沒有辦法在 object 中循環以打印 c++ 中所有成員的值?

[英]Is there a way to loop inside an object to print the values of all its members in c++?

最近我在面試,面試的最后一個問題是做一個 function 以 object 作為參數。 function 必須在傳遞的 object 內部循環以打印其屬性的所有值。 javascript 中的for/in之類的東西 c++ 中有這樣的東西嗎?

實際上,您可以對某些類型執行此操作。

對於類似元組的類型(參見std::applyfold expression ):

template<typename T> void print(T&& tuple) {
    apply([](auto&&... elements) { (..., (std::cout << elements << '\n')); }, tuple);
}

int main() { print(std::tuple{1, 2.3, "abc"}); }

對於聚合類型,如果您知道它們的字段數(請參閱 結構化綁定):

template<typename T> void print(T&& two_fields_aggregate) {
    auto&& [a, b] = two_fields_aggregate;
    std::cout << a << '\n' << b << '\n';
}

struct Example {
    int i;
    double d;
};

int main() { print(Example{1, 2.3}); }

最困難的情況:聚合類型,如果你不知道它們的字段數量(參見Boost.MagicGet ):

template<typename T> void print(T&& aggregate) {
    apply(
        [](auto&&... elements) { (..., (std::cout << elements << '\n')); },
        boost::pfr::structure_to_tuple(aggregate)
    );
}

struct Example {
    int i;
    double d;
    std::string_view s;
};

int main() { print(Example{1, 2.3, "abc"}); }

如果你的 object 有私人數據,你顯然不能從外面訪問它,因此不能打印它。

暫無
暫無

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

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