我需要一个带有两种构造函数的类(非常简单):在一种情况下,我分配一个普通的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;
}
答案 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:
// ...
};