以下のテンプレート機能fCompare()
の使用は正しいですか?テンプレート関数はどのように/どこに割り当てられていますか?
//ヘッダ
template<typename _T > class SomeClass
{
typedef int (*COMPAREFUNC)(_T*,_T*);
COMPAREFUNC Compare;
public:
void SetCompareFunction(COMPAREFUNC pfC) { Compare=pfC; }
...
};
template<typename _T > int fCompare(_T *pO, _T *pN)
{
if (pN==NULL) throw (const char*)"Null not allowed";
if (pO!=NULL) return (*pO > *pN)?1:(*pO < *pN)?(-1):0;
return 0;
}
//コード
SomeClass<int> aC;
aC.SetCompareFunction(fCompare<int>); // <******* here
...
インスタンス関数はテンプレートから作成された場合私の心配はある:それはは、スタックのように見えますが、他のコードでIそれをテストするために使用された、私はスタックをハンマーしようとしたと、Compare()
はちょうど行くことを続けた。このようなテンプレートを安全に使用できますか?
申し訳ありませんが、「スタックを叩く」とはどういう意味ですか? C++のテンプレートは通常、通常の関数に展開されるため、そのように動作する必要があります。あなたがプログラムを破壊しようとしたことを知らずに、私はどれくらい助けることができないのか分かりません。 – templatetypedef
@templatetypedef:私は元のCプログラマなので、関数の引数として渡されたものはスタックに格納されています。C++では必ずしもそうではありません。 – slashmais
@slashmaisは完全に実装に依存します。 –