gpt4 book ai didi

c++ - 可变参数(包大小为 N)和默认参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:54 25 4
gpt4 key购买 nike

Nstd::size_t 类型的模板参数。我希望能够通过两种方式为我的类调用构造函数:

A a(x1, x2, x3, ..., xN)

A a(x1, x2, x3, ..., xN, xN1)

其中 xi 变量都是同一类型。我的第一个想法是:

template <std::size_t N>
struct A
{
template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
A(Args ...args) {
f(args...); // where f is some function
}

template <typename ...Args, typename = typename std::enable_if<N+1 == sizeof...(Args), void>::type>
A(Args ...args) {
// run f on the first N arguments
// run g on the last argument (selection is done using templates, I just did not want to write the code)
}
};

此技术在以下位置有解释:Variadic templates with exactly n parameters .当然,这样做的问题是您不能以这种方式重载构造函数。

有什么想法吗?

最佳答案

只是 SFINAE 不同:

template <std::size_t N>
struct A
{
template <typename ...Args,
typename std::enable_if<N == sizeof...(Args), int>::type = 0>
A(Args ...args) {
}

template <typename ...Args,
typename std::enable_if<N+1 == sizeof...(Args), int>::type = 0>
A(Args ...args) {
}
};

Demo .

关于c++ - 可变参数(包大小为 N)和默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com