根据c ++模板函数中的typename调用不同的构造函数

时间:2016-03-23 11:26:05

标签: c++ templates constructor typetraits

我有一个名为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上的函数重载的情况下解决此问题?

2 个答案:

答案 0 :(得分:3)

为您的类型编写创建函数:

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>());
    }
}

答案 1 :(得分:1)

如果你的类是可复制构造的,你不需要这个init()函数,只需使用d3['Option1'] = pd.Categorical(d3['Option1'],['min','default','max'], ordered=True) d3['Option2'] = pd.Categorical(d3['Option2'],['min','default','max'], ordered=True) d3 = d3.sort_values(['country','Option1', 'Option2' ]) print d3 country region measure Option1 Option2 4 A R1 86 min min 13 A R2 72 min min 22 A R3 36 min min 5 A R1 86 min default 14 A R2 72 min default 23 A R3 36 min default 3 A R1 86 min max 12 A R2 72 min max 21 A R3 36 min max 7 A R1 86 default min 16 A R2 72 default min 25 A R3 36 default min 8 A R1 86 default default 17 A R2 72 default default 26 A R3 36 default default 6 A R1 86 default max 15 A R2 72 default max 24 A R3 36 default max 1 A R1 141 max min 10 A R2 215 max min 19 A R3 473 max min 2 A R1 141 max default 11 A R2 215 max default 20 A R3 473 max default 0 A R1 141 max max 9 A R2 215 max max 18 A R3 473 max max 31 B R1 79 min min 40 B R2 88 min min 49 B R3 54 min min 32 B R1 79 min default 41 B R2 88 min default 50 B R3 54 min default 30 B R1 384 min max 39 B R2 439 min max 48 B R3 172 min max 34 B R1 79 default min 43 B R2 88 default min 52 B R3 54 default min 35 B R1 79 default default 44 B R2 88 default default 53 B R3 54 default default 33 B R1 384 default max 42 B R2 439 default max 51 B R3 172 default max 28 B R1 79 max min 37 B R2 88 max min 46 B R3 54 max min 29 B R1 79 max default 38 B R2 88 max default 47 B R3 54 max default 27 B R1 384 max max 36 B R2 439 max max 45 B R3 172 max max 构造函数的两个参数版本:

std::vector