可变参数模板 class 构造函数
Variadic-templates class constructor
我写了下面的代码来创建一个class,它带有一个构造函数,该构造函数将一个整数加两个双精度变量(N)作为参数,如下所示:
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <array>
template <std::size_t N>
class point_t {
public:
std::vector<int> values;
template<typename ... Args>
point_t(Args ... args, double distance, double value) {
std::array<int , N> list = {(args)...};
for(std::size_t i=0; i<N; ++i) values[i] = list[i];
}
};
int main(int argc, char *argv[]) {
point_t<4> test(1, 2, 3, 4, 3.0, 6.7);
return 0;
}
编译return出现如下错误:
No matching constructor for initialization of 'point_t<4>'
Candidate constructor not viable: requires 2 arguments, but 6 were provided
我错过了什么?
What I'm missing?
只有在最后一个位置才能推导出可变参数包。
所以
template<typename ... Args>
point_t(double distance, double value, Args... args)
有效并且
template<typename ... Args>
point_t(Args ... args, double distance, double value) {
不会。
我写了下面的代码来创建一个class,它带有一个构造函数,该构造函数将一个整数加两个双精度变量(N)作为参数,如下所示:
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <array>
template <std::size_t N>
class point_t {
public:
std::vector<int> values;
template<typename ... Args>
point_t(Args ... args, double distance, double value) {
std::array<int , N> list = {(args)...};
for(std::size_t i=0; i<N; ++i) values[i] = list[i];
}
};
int main(int argc, char *argv[]) {
point_t<4> test(1, 2, 3, 4, 3.0, 6.7);
return 0;
}
编译return出现如下错误:
No matching constructor for initialization of 'point_t<4>'
Candidate constructor not viable: requires 2 arguments, but 6 were provided
我错过了什么?
What I'm missing?
只有在最后一个位置才能推导出可变参数包。
所以
template<typename ... Args>
point_t(double distance, double value, Args... args)
有效并且
template<typename ... Args>
point_t(Args ... args, double distance, double value) {
不会。