一段代码胜过千言万语:
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 ???
}
int
,第三个是long
)”还是“相同类型的任意数量的参数”? - Utaallong long
,这样你就可以传递 int、short、long、char、bool 等精度较低的任何类型。 - ApproachingDarknessFishf(...)
函数? - bames53f(...)
。它也可以被解释为可变参数模板,因此不太清楚。 - bames53