c++ - 接受无限相同数量的 3 种类型的函数

标签 c++ function templates c++11 template-meta-programming

我怎样才能制作一个接受相同数量的字符串的函数 - 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/

相关文章:

c++ - 找到两个嘈杂的光照变体图像之间的差异(直方图对齐等)

c++ - 内存状态c++

javascript - 我怎样才能使这个活跃的点击?

c++ - C++ 中带有混合插件的奇怪循环继承

c++ - pthreads 进程未显示在 ps 输出中

c++ - 信号与槽的连接(关于qlistview)——Qt

c++ - 如何在C++中使函数返回字符串

javascript - js函数中的默认参数

c++ - 为什么来自模板化基类的方法不可见?

c++ - 带有 const 限定符的类型推导失败