我怎样才能制作一个接受相同数量的字符串的函数 - int - char
func("aa","sd","zzz",123,13,3,'w','a','x') //correct
func("aa","sd",123,3,'w','x') //correct
func("aa",2,'w') //correct
func()//correct
func("aa","VV",23,'w') //error because 2 string 1 int and 1 char
func('a',2) //error 0 string 1 char 1 int
.....
我想在编译时而不是在运行时检查变量,所以我不能使用 std::vector
。
有什么想法吗?可能吗?
最佳答案
假设您的参数如下所示:
struct Param
{
string mS;
char mC;
int mN;
};
与其尝试编写一个接受未知或可变数量参数的函数,不如让该函数接受一个 vector
。
void func (const vector <Param>& parameters)
更好的是,让函数将一对迭代器带到所述 vector :
void func (vector <Param>::const_iterator begin, vector <Param>::const_iterator end)
更好的是,通用化容器和迭代器:
template <typename Iterator> void func (Iterator begin, Iterator end)
在最后一种情况下,迭代器可以引用任何符合迭代器限制的东西。这包括 C 风格的数组。你可以像这样使用它:
void Doer()
{
Params params[] =
{
Param("aa",123, 'W'),
Param("sd",13,'a'),
Param("zzz",3,'x')
};
const size_t numParams = sizeof (params) / sizeof (params[0]);
func (params, params + numParams);
}
当然你需要一个构造函数:
struct Param
{
Param (const std::string s, int n, char c)
:
mS (s),
mN (n),
mC (c)
{
}
// ...
};
在某些情况下,您可能需要一个制造商类型的功能:
Param make_param (const std::string& s, int n, char c)
{
Param retval (s, n, c);
return retval;
}
关于c++ - 接受无限相同数量的 3 种类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21194798/