c++ - 如何根据 C++ 中的参数初始化类的成员?
问题描述
我想实现一个使用 N 维向量的类(从数学的角度来看)。我正在使用 opencv 库中的 Vec 对象,它们的签名如下所示:该向量内的元素数量在Vec<typename _Tp, int cn>
哪里。我必须为参数cn
提供一个常量。cn
我希望我的班级看起来像这样:
class MyClass
{
private:
Vec<float, dim> m_center;
vector<Vec<float, dim>> m_points;
// ...
}
我希望能够进行动态初始化dim
,即创建一个MyClass
对象,将其dim
设置为我想要的任何数字。如何在 C++ 中正确解决这个问题?
解决方案
template <typename T, int N=9>
class Vec
{
public:
Vec()
{
//auto deleter = [](T* t) { delete[] t; };
//unique_ptr <T, decltype(deleter)> test(new T[N], deleter); //customized deleter omitted
t = new T[N];
}
Vec(const Vec &v)
{
sz = v.sz;
t = new T[sz];
}
string getType()
{
return typeid(T).name();
}
int getSize()
{
return sz;
}
~Vec()
{
delete [] t;
}
private:
T *t;
int sz = N;
};
template<int dim = 1>
class MyClass
{
public:
MyClass()
{
m_points.resize(2);
}
Vec<float, dim> getCenter()
{
return m_center;
}
vector<Vec<float, dim>> getPoints()
{
return m_points;
}
private:
Vec<float, dim> m_center;
vector<Vec<float, dim>> m_points;
};
测试代码:
int main()
{
MyClass<10> my;
cout << "center size = " << my.getCenter().getSize() << endl;
cout << "center type =" << my.getCenter().getType().c_str() << endl;
cout << "points size" << my.getPoints().size() << endl;
cout << "first point size = " << my.getPoints()[0].getSize() << endl;
cout << "first point type =" << my.getPoints()[0].getType().c_str() << endl;
std::cout << "Hello World!\n";
}
输出:
center size = 10
center type =float
points size2
first point size = 10
first point type =float
Hello World!
推荐阅读
- c++ - 如何解决 .cpp 和 .hpp 文件中的 calloc() 错误?
- qt - 如何将 Component.onCompleted:{} 方法从 ui.qml 转移到 .qml?
- angular - 如何在不冻结的情况下处理传单地图上http请求的中大型结果
- html - 为什么文字被推上去?
- javascript - 在 Javascript/NodeJs 中调用方法两次时 JSON 返回空
- c# - 保存网格和所有孩子的最佳方法
- css - 输出文件夹中的样式表文件
- python - 多线程在 GIL 存在的情况下会有什么优势?
- google-schemas - 在我的电子邮件版本中添加架构代码时遇到问题
- vue.js - 如何使用 vue-meta 插件在 html 中呈现元标记?