[英]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:錯誤:在賦值結果= new T時無法將'float **'轉換為'float *'; ^
我可以更改行(*)但它不是我最喜歡的解決方案,因為它會與數據不一致 - 我寧願這樣做。 那么如何初始化它以感覺所有結果表為0?
如果您不想將(*)行更改為T* result
,則可以使用std::remove_pointer<>
類型特征(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
可能會更清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.