次のテンプレート関数の使い方は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
...
私の心配は、インスタンス関数がテンプレートから作成される場所です。これはスタックのように見えますが、テストに使用した他のコードでは、スタックを叩こうとしましたが、Compare()
そのまま続けました。このようなテンプレートを安全に使用できますか?