重载构造函数的最简单方法

时间:2014-03-18 12:27:11

标签: c++ templates overloading

我需要一个带有两种构造函数的类(非常简单):在一种情况下,我分配一个普通的c数组,在另一种情况下我分配一个std :: vector。构造函数的参数在两种情况下都是相同的。什么是使它们变得明显而不必向其中一个添加伪参数的适当方法?

编辑:我想知道以下解决方案在某些情况下是否合理:

#include<iostream>

using namespace std;

template <int v>
struct data_container
{
    enum { value = v };
};

typedef data_container<0> c_array;
typedef data_container<1> MatrixXd_type;

/*
 * =====================================================================================
 *        Class:  fooC
 * =====================================================================================
 */
class fooC
{
public:

    fooC (c_array) {
        cout<<"c_array"<<endl;
    };
    fooC (MatrixXd_type) {
        cout<<"MatrixXd_type"<<endl;
    };


private:
    fooC();

}; /* -----  end of class fooC  ----- */

int main() {
    c_array type1;
    MatrixXd_type type2;
    fooC obj_foo1(type1);
    fooC obj_foo2(type2);
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您的类中有两种不同类型的数据的想法实际上意味着您有2个子类共享(可能)一些基类功能。

这就是你应该如何处理这个:是的,有两个不同的构造函数,每个子类一个。每个子类都包含适合它的数据。

答案 1 :(得分:0)

我肯定会使用模板类:

template<class Container>
class klass {
private:
    Container container;
public:
    // ...
};

以便您可以致电:

klass<std::array<int, 10>> x;
klass<std::vector<int>> y;

但更好的解决方案是隐藏实现并只使用std::vector

class klass {
private:
    std::vector<int> container;
public:
    // ...
};