gpt4 book ai didi

c++ - 如何/在哪里分配模板函数?

转载 作者:行者123 更新时间:2023-11-28 03:39:46 25 4
gpt4 key购买 nike

下面对模板函数 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() 一直在继续。我可以安全地使用这样的模板吗?

最佳答案

fCompare<int>在编译时创建,作为代码段的一部分。您可以将其视为一种常量、静态数据,就像 const int。在文件范围内。每次调用 SetCompareFunction ,因此,它接收到一个指向相同函数的指针。因此,无论您调用它多少次,它都不会用完任何额外的内存,您也不会因此而耗尽堆栈或堆空间。

由此得出的结论是,模板函数参数必须始终是可以在编译时计算的参数。将变量(模板变量除外)作为模板参数传入是非法的。

关于c++ - 如何/在哪里分配模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9652709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com