【发布时间】:2022-01-16 12:10:00
【问题描述】:
我的主要问题是我正在尝试创建一个函数来初始化一个可以通过不同方式初始化的类的std::vector,所以我决定使用可变参数模板,但是,就像在这个例子中一样,确实如此不编译:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct MyClass {
MyClass(int v): value(v){}
MyClass(string v): value(stoi(v)){}
int value;
};
template<typename ...Args> vector<MyClass> mc_vector(const Args &...args);
int main()
{
auto vec = mc_vector(1, "3", 5);
for (auto &i : vec)
cout << i.value << " ";
cout << endl;
}
template<typename ...Args, typename T> void mc_vector_(vector<MyClass>& vec, const Args &...args, const T& t) {
vec.emplace_back(t);
mc_vector_(vec, args...);
}
template<typename ...Args> vector<MyClass> mc_vector(const Args &...args) {
vector<MyClass> vec;
vec.reserve(sizeof...(args));
mc_vector_(vec, args...);
return vec;
}
实际上,我想知道您是否想出一种更聪明的方法。
【问题讨论】:
标签: c++ templates variadic-templates