基本的な質問に答えるのが好きでない人のための公正な警告:私は長い間C++コードを見たことがあまりありません。私が求めているものの中には、基本的な構文のものがあります。私は疑問を定式化する言語について十分に分かっていません。私はgoogleに何がわからない。うまくいけば、あなたの何人かが私の質問を結びついて何かに編集するのを助けてくれるはずです。Dlib:ignoreフラグを1に設定してmmod_rectを初期化するにはどうすればよいですか?
これは問題です。私は現在、dlibに関わるプロジェクトに取り組んでいます。 dlibには、hereと定義されたmmod_rectという構造体があります。
struct mmod_rect
{
mmod_rect() = default;
mmod_rect(const rectangle& r) : rect(r) {}
mmod_rect(const rectangle& r, double score) : rect(r),detection_confidence(score) {}
mmod_rect(const rectangle& r, double score, const std::string& label) : rect(r),detection_confidence(score), label(label) {}
rectangle rect;
double detection_confidence = 0;
bool ignore = false;
std::string label;
operator rectangle() const { return rect; }
bool operator == (const mmod_rect& rhs) const
{
return rect == rhs.rect
&& detection_confidence == rhs.detection_confidence
&& ignore == rhs.ignore
&& label == rhs.label;
}
};
inline mmod_rect ignored_mmod_rect(const rectangle& r)
{
mmod_rect temp(r);
temp.ignore = true;
return temp;
}
関連性がある場合、長方形のドキュメントはhereです。基本的に、rectangleは左、上、右、下の整数を渡すことで初期化されるクラスです。次のように
Iが最初で提供された作業コードがmmod_rectsのベクトルを定義:
std::vector<mmod_rect> rects;
そしてそれはラインとベクトルにプッシュ:
rects.push_back(rectangle(left, top, right, bottom));
Iは、上記で混乱していますライン。 rectsはmmod_rectsのベクトルであり、rectのベクトルではないので、コードがコンストラクタを呼び出してrectに渡して、それをベクトルにプッシュするのはどうでしょう。なぜこれはコンパイラエラーを投げないのですか?私はそれはそれは言うmmod_rectの構造体定義の行、に関係してい前提としています
mmod_rect(const rectangle& r) : rect(r) {}
私の理解では、これはあなたが長方形への参照を渡すことによってmmod_rectを構築することができることを意味していることです。私は誰かが、まさにこの構文が何をするのか説明できる場合はコロン
: rect(r) {}
を使用して構文で混乱していて、一back操作はここでどのように機能するか、それは素晴らしいことです。
今私が尋ねたいと思う主なものに。私の目標は、ignoreフラグが1にセットされているmmod_rectsでベクトルrectを生成することです。これをどうやってやりますか?次のコードは目標を達成するでしょうか?
mmod_rect r(rectangle(left, top, right, bottom));
r.ignore = 1;
rects.push_back(r);
ignored_mmod_rectを使用してこれを行うより良い方法はありますか?私はコードが何をしているか完全に理解していません。
いくつかの用語を解説していただきありがとうございます。メンバ初期化子リストのドキュメントを見ることは、何が起こっているのかを理解するのに役立ちました。 –