使用模板typename初始化指针
pointer initialization with template typename
我已经从模板类继承了类。我想用模板参数初始化指针。我该怎么做呢?
Algorithm.h:
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include <iostream>
using namespace std;
template <typename T>
class Algorithm
{
protected:
T data;
T result; //(*)
int dataSize;
int resultSize;
public:
Algorithm(){}
Algorithm(T in, int inSize){
cout<<"Algorithm constructor!"<<endl;
data = in;
dataSize = inSize;
resultSize = dataSize;
result = new T; //(**)
for (int i = 0; i<this->resultSize; i++){
this->result[i] = 0;
cout<<"i: "<<i<<" *(this->result+i) = "<<this->result[i]<<endl;
}
}
#endif // ALGORITHM_H
错误在(**)行:
/home/user/Projects/Algorithms/algorithm.h:23: error: cannot在赋值中将'float**'转换为'float*'result = new T;^
我可以改变行(*),但这不是我最喜欢的解决方案,因为它将与数据不一致-我宁愿这样。我如何初始化它让所有结果表都是0呢?
如果您不想将(*)行更改为T* result
,那么您可以使用std::remove_pointer<>
类型trait (c++ 11或更高版本)
result = new typename std::remove_pointer<T>::type(); // a single element value-initialized
或者(如果你想要一个数组,这可能就是你想要的)
result = new typename std::remove_pointer<T>::type [resultSize]; // array of resultSize elements
最后,您甚至可以将数组值初始化为
result = new typename std::remove_pointer<T>::type [resultSize]{}; // value-initialized array
然而,我发现这个解决方案很尴尬(至少可以说),如果你使用T* result
来代替,可能会更清楚。
相关文章:
- 分段错误 - 读取初始化指针的数组
- 初始化指针的常量向量
- 初始化指针或引用成员变量以指向另一个成员
- C++初始化指针/引用/复制细微差别
- 使用无效指针初始化指针声明符的行为是否未定义?
- 在一行中初始化指针(新uint8_t[高度*宽度*3])
- 如何使用可变模板初始化指针?
- 初始化指针时出现写入访问冲突
- C 错误,带有卷曲括号的字面初始化指针
- 重新初始化指针是一种不好的做法吗?
- 初始化指针?C
- 初始化指针向量的向量
- 如何在类函数中正确初始化指针
- C++初始化指针会使应用程序随机崩溃
- 初始化指针结构 - 内存中的外观
- 如何使用struct构造函数在结构中初始化指针阵列
- 在一行中声明并初始化指针到类实例
- 分配数组与初始化指针
- QT 中的非初始化指针
- 使用地址值初始化指针