我有一个自定义的集合,名为 MySet
,一个整数应该传递给 MySet
的构造函数来构建它。我想写一个函数来初始化 std::vector
的MySet
。
我希望这个函数也能够初始化 std::vector
的std::set <int>
.
类似于:
template<typename S>
void init(std::vector<S> &v, int n){
v.reserve(n);
for(int i=0; i<n; i++){
if(std::is_same<S, MySet>::value){
v.push_back(S(42));
}
else{
v.push_back(S());
}
}
return;
}
不使用 init
上的函数重载是否可以解决这个问题? ?
最佳答案
为您的类型编写一个创建器函数:
template <class S>
S create()
{
return S();
}
template <>
MySet create<MySet>()
{
return MySet(42);
}
template<typename S>
void init(std::vector<S> &v, int n){
v.reserve(n);
for(int i=0; i<n; i++){
v.push_back(create<S>());
}
}
关于c++ - C++ 模板函数中根据类型名调用不同的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176884/