我現在正試圖弄清楚一件事,但我不能,我需要為此找到一種型別
(Python)
def fn1(hello: list[str]) -> None:
pass
mv = [(fn1, ("1", "hello", "12", "no")), (fn1, ("w", "ufewef", "1ee", "no"))] # any size
什么是 C 型別mv?(它是否可變并不重要)
我試過了,std::vector<std::vector<std::string, std::function>>但它會拋出錯誤,有沒有辦法做到這一點,或者必須使用兩個向量?
uj5u.com熱心網友回復:
這些型別變得復雜,因此為了使它們更短,我將首先定義幾個型別別名:
using StringVec = std::vector<std::string>;
using StringVecFunc = std::function<void(const StringVec&)>;
現在您的資料容器的型別可以是以下任何一種:
using T1 = std::vector<std::tuple<StringVecFunc, StringVec>>;
using T2 = std::vector<std::pair<StringVecFunc, StringVec>>;
struct StringVecFuncAndArgs {
StringVecFunc func;
StringVec args;
};
using T3 = std::vector<StringVecFuncAndArgs>;
最大的區別在于您如何訪問包含一個函式和一個字串容器(如 python 元組)的事物的元素。為std::tuple您使用std::get<0>(t)andstd::get<1>(t)或std::get<StringVecFunc>(t)and std::get<StringVec>(t)。供std::pair您使用p.first和p.second。對于您使用的自定義結構data.func和data.args.
該tuple解決方案也許是從一個Python元組的想法最直接的翻譯。的pair是快速和容易的,如果不需要它可以從大量的代碼中使用。自定義結構解決方案需要最多的作業,但允許您為成員提供有用的名稱。
uj5u.com熱心網友回復:
我的程式使用一個宣告 a的stringVec 結構vector<string> hello和一個回傳void 的函式,stringVecFunc用作示例列印hello.
struct stringVec {
vector<string> hello;
void stringVecFunc();
};
void stringVec::stringVecFunc() {
for (auto &x: hello) cout << x << "\t";
cout << endl;
}
在此之后,vector 負責stringVec通過這種方式存盤型別的資料:
stringVec stringVec1;
stringVec1.hello = {"hi", "hello", "hi", "hello"};
vector<stringVec> vec;
你可以在這里運行一個完整的例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358017.html
上一篇:R函式聚合串列中的所有元素
