c++类MatLab构造函数重载
C++ MatLab like constructor overloading
我有一个类Sparse_Matrix,它允许我有效地处理稀疏矩阵。
我想通过使用特定的(惯用的)关键字如Upper、Identity等来实例化一个特定的矩阵。
这是我的类声明(命名空间矩阵)
template <typename T>
class Sparse_Matrix
{
private:
int rows;
int cols;
std::vector<int> col;
std::vector<int> row;
std::vector<T> value;
...
是否有办法获得一个预初始化的对象?
Sparse_Matrix<int> = Eye(3);
将返回一个3 × 3的单位矩阵。
我已经看过构造函数的习惯用法,但是这些构造函数需要一些与我的类不兼容的静态类型(尽管我愿意接受建议)。
我也试过这个代码:
template <typename T>
Sparse_Matrix<T> Eye(int size)
{
Sparse_Matrix<T> ma;
ma.IdentityMatrix(size);
std::cout << "Eye!" << std::endl;
return ma;
}
…
Sparse_Matrix<int> blah = Eye(10);
但无济于事。
谢谢你,
SunnyBoyNY
在c++中只有一个地方可以根据表达式的使用方式推导模板形参:用户定义的转换操作符。
struct Eye
{
int size;
explicit Eye(int requestedSize) : size(requestedSize) {}
template<typename T>
operator SparseMatrix<T>() const { SparseMatrix<T> ma; ma.IdentityMatrix(size); return ma; }
};
现在你可以写
Sparse_Matrix<int> blah = Eye(10);
使用构造对象的函数是一个很好的策略。在您的示例中,一种解决方案是专门告诉Eye
类型:
Sparse_Matrix<int> blah = Eye<int>(10);
有时为了清晰起见,这些函数在类中是静态的:
template<typename T>
class Sparse_Matrix
{
public:
static Sparse_Matrix<T> Eye(...) {...}
};
在这种情况下,您将调用:
Sparse_Matrix<int> blah = Sparse_Matrix<int>::Eye(10);
相关文章:
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- C++将带有重载构造函数的对象添加到另一个对象
- 将重载构造函数传递给类之间的函数
- 使用重载构造函数时出现不完整的类型错误
- 在 if 语句中调用重载构造函数失败
- C++ 具有常量数组和initializer_list的重载构造函数
- C++头/实现文件中的默认和重载构造函数?
- 有没有办法用 2D 数组 (int) 重载构造函数?
- C++重载构造函数问题
- C++:使用结构或枚举重载构造函数之间的区别
- 未调用模板成员的重载构造函数
- 如果我们在c++中重载构造函数,那么默认构造函数是否仍然存在
- 如何为显式重载构造函数启用复制初始化
- 执行重载构造函数的原因和时间
- c++ 在对象组合上使用重载构造函数
- 按参数C++类型专门化重载构造函数
- 具有公共重载构造函数的私有枚举
- 如何处理默认构造函数和重载构造函数之间的歧义
- 变量不会在重载构造函数C++后保持声明状态
- 对重载构造函数 C++ 的不明确调用