如何使template class的method不被inline-lize?

kimryo 2003-08-30 12:06:16
根据下面的程序:

template<class T>
class CTemp
{
public:
CTemp(void)
{
}
~CTemp(void)
{
}

__declspec(noinline) void foo(void);

};

template<class T>
__declspec(noinline) void CTemp<T>::foo(void)
{
int a=0;
Muck Ficrosoft;
}

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
CTemp<int> t;
//t.foo(); //未调用foo method
return 0;
}

这段程序可以成功编译,说明foo method应该是compile time根据程序被expand的,这种东西除了marco就是inline method\function,如程序所示,加了__declspec(noinline)也没用。如果template class的一个method太长的话做成inline可能不太好吧。。。
...全文
38 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimryo 2003-09-04
  • 打赏
  • 举报
回复
<![CDATA[
]]>
jyfcsdn 2003-09-01
  • 打赏
  • 举报
回复
即使你不加__declspec(noinline) ,该函数也不被inline,何来inline-lize
sevecol 2003-08-30
  • 打赏
  • 举报
回复
模板的原则是调用才实例化.
实例化和inline和marco是两回事情.

sevecol 2003-08-30
  • 打赏
  • 举报
回复
而你实例化后的函数是否inline,编译起决定.
实例化后和一般函数一样.
sevecol 2003-08-30
  • 打赏
  • 举报
回复
实例化就是编译器根据你调用摸板时候指定的类型或者常数参数,产生一份你需要的类型或着函数.

模板的实例化并不是替换.
yjh1982 2003-08-30
  • 打赏
  • 举报
回复
方法1:加入循环语句
方法2:置为虚函数
kimryo 2003-08-30
  • 打赏
  • 举报
回复
何谓实例化?能说具体一点吗?谢谢!

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧