サイズ変更可能な配列を使用できるテンプレートを作成しようとしています。 sizeof(T)を見つける方法はありますか?私は、配列のサイズを変更する関数でreallocを使いたいので、新しいものではなくmallocを使用しています。これは、エラーを取得している私のクラスのコンストラクタです:C++でテンプレートを作成するときにsizeof(T)を見つけることは可能ですか?
template <class T>
set<T>::set(void) {
arr = malloc(10 * sizeof(T));
numElts = 0;
size = 10;
};
構築しようとしたとき、私は、次のエラーメッセージが表示されます。
私はそれを呼んでいる主な機能にはerror C2440: '=' : cannot convert from 'void *' to 'int *'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1> c:\set.cpp(42) : while compiling class template member function 'set<T>::set(void)'
1> with
1> [
1> T=int
1> ]
:
set<int> *set1 = new set<int>();
私が行った研究から、コンパイラはsizeof(T)に何を使うべきかを知る方法がないように見えるので、コンパイルできません。私はこれについて他にどのように行くだろうか?
'set'はPODタイプでのみ動作することに注意してください。 –
エラー*はっきりと述べています。「void *からint *に変換できません。明示的にキャストする必要があることを示唆しています。明らかに、問題は 'sizeof(T)'が何であるかを知らないということです。 –
*コンパイラがsizeof(T)に何を使うべきかを知る方法がないように見える* - もちろんそうです;テンプレートの実装はすべてコンパイル時に実行されます。エラーメッセージはクリアです。 mallocの結果をキャストする必要があります。なぜあなたはmallocをまったく使っているのですか...考えていません。 mallocはコンストラクタをあなたのために呼び出さないでしょう。 –