我有一个带有接受整数的模板的类:
template <unsigned int N>
class Example {};
我正在寻找一种方法来定义一个(成员)函数,该函数接受一定数量的 Example
对象作为参数。金额由N
决定,所以函数会这样使用:
Function(Example<2>(), Example<2>());
Function(Example<3>(), Example<3>(), Example<3>());
到目前为止我尝试了什么:
使用初始化列表,可以将一组对象传递给函数:
template <unsigned int N>
void Function(std::initializer_list<Example<N>> list);
//...
Function({Example<2>(), Example<2>()});
但是,除了实际上只传递了一个参数(列表)这一事实之外,问题在于使用此方法可以使用任意数量的参数:
Function({Example<2>()});
我也尝试过使用可变参数函数:
template <unsigned int N>
void Function(Example<N> e...)
{
va_list args;
va_start(args, e);
//...
}
Function(Example<2>(), Example<2>());
这使得使用真实参数成为可能,但是使用任意数量的参数的问题仍然存在,并且无法知道实际传递了多少参数。
最佳答案
假设您希望从 Example<N>
中推断出参数的数量。类型,然后全部 Example<I>
应该共享相同的 N
,一个 C++17 解决方案可能是
template <unsigned int... I>
auto Function( Example<I>... ) ->
std::enable_if_t<( ( I == sizeof...(I) ) && ... )>
{
// or static_assert() if you always want an error
}
关于c++ - 具有由整数确定的固定数量参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47866607/