gpt4 book ai didi

c++ - c++模板函数中根据类型名调用不同的构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:58:03 26 4
gpt4 key购买 nike

我有一个名为 MySet 的自定义集,一个整数应该传递给 MySet 的构造函数构建它。我想写一个函数来初始化 std::vectorMySet .我希望这个函数也能够初始化 std::vectorstd::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/

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