3

2 番目のパラメーターをオプションとして宣言するにはどうすればよいですか?

template <typename T>
inline void Delete (T *&MemoryToFree,
    T *&MemoryToFree2 = ){
    delete MemoryToFree;
    MemoryToFree = NULL;

    delete MemoryToFree2;
    MemoryToFree2 = NULL;

}

= 演算子の後に、NULL、(T*)NULL など、いくつかのことを試しました。これは実行できますか?

コンパイラが私にそれをさせてくれた唯一の方法は、オーバーロードを使用することでした...

    template <typename T, typename T2>
inline void Delete (T *&MemoryToFree, T2 *&MemoryToFree2){
    delete MemoryToFree;
    MemoryToFree = NULL;

    delete MemoryToFree2;
    MemoryToFree2 = NULL;
}
4

4 に答える 4

12

関数をオーバーロードすることができます

template <typename T>
inline void Delete (T *&MemoryToFree){
        delete MemoryToFree;
        MemoryToFree = NULL;
}

template <typename T, typename T2>
inline void Delete (T *&MemoryToFree, T2 *&MemoryToFree2){
        delete MemoryToFree;
        MemoryToFree = NULL;

        delete MemoryToFree2;
        MemoryToFree2 = NULL;
}
于 2009-10-16T18:47:17.793 に答える
8

単純な「オンデマンド静的左辺値ジェネレーター」をいつでも作成し、パラメーターのデフォルト値として使用できます

template <typename T> inline T& get_lvalue() {
  static T t;
  return t;
}

あなたのコードで

template <typename T> 
inline void Delete(T *&MemoryToFree, T *&MemoryToFree2 = get_lvalue<T*>())
于 2009-10-17T00:30:12.313 に答える
2

いいえ、これは不可能です。参照でデフォルト パラメータを使用することはできません。

于 2009-10-16T18:47:24.490 に答える