1 つのコードは 1,000 語に値します。
int main()
{
// All of the following calls return true:
AreEqual(1, 1);
AreEqual(1, 1, 1);
AreEqual(1, 1, 1, 1);
AreEqual(1, 1, 1, 1, 1);
// All of the following calls return false:
AreEqual(1, 2);
AreEqual(1, 2, 1);
AreEqual(1, 7, 3, 1);
AreEqual(1, 4, 1, 1, 1);
}
任意の数の引数を受け入れる関数 AreEqual() を実装する方法は?
些細だが退屈な解決策は、オーバーロードによるものです。
bool AreEqual(int v1, int v2);
bool AreEqual(int v1, int v2, int v3);
bool AreEqual(int v1, int v2, int v3, int v4);
......
別の簡単ですが実行できない解決策は次のとおりです。
bool AreEqual(...);
呼び出し元が別の引数 (引数カウントまたは終了マーカー) を追加して引数の数を指定する必要があるため、この解決策は実行できません。
さらに別の方法は、可変個引数のテンプレート引数を使用することです
template<class... Args>
bool AreEqual(Args... args)
{
// What should be placed here ???
}