[英]Defining a struct method with function parameter in C++
查看 C++ 接口代碼。 我無權訪問實施。 我做了一個小例子來展示這種行為。
struct MessageInfo{
MessageInfo() : length{}, from{}, to{} {}
MessageInfo(int _length, string _from, string _to) : length{_length}, from{_from}, to{_to}
{}
int length;
string from;
string to;
using IsEnumerableTag = void;
template<typename F>
void enumerate(F& fun) {
fun(this->length);
fun(this->from);
fun(this->to);
}
};
有人可以向我解釋一下這個結構定義中枚舉結構 function 成員的用法是什么嗎?
根據我的理解,這個結構中的枚舉可以將 function 類型作為輸入參數(函數指針?)
MessageInfo messageInfo (1000, "A", "B");
messageInfo.enumerate<???>(printFrom(messageInfo.From);
void printFrom(string f) {
cout<<"the msgInfo is sent from "<< f<<endl;
}
它希望您傳遞一個通用的可調用對象,例如 lambda。您不必指定模板參數。 可以從function這個論證推導出來。
例如:
MessageInfo messageInfo (1000, "A", "B");
auto printFields = [](auto&& f){ std::cout << "Value of this field is " << f << ".\n"; };
messageInfo.enumerate(printFields);
哪個應該打印
Value of this field is 1000.
Value of this field is A.
Value of this field is B.
從這里可以看出, enumerate
可用於對每個成員應用相同的操作,而不必為每個成員重復自己。
簽名有點不尋常。 您通常會期望F
或F&&
而不是F&
。 使用F
或F&&
,您可以將 lambda 表達式直接放入調用中,而不必先將其存儲在變量中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.