模板函数的实例化问题?

疾似云流 2009-11-19 06:07:47
有两个重载的模板函数,


template<typename T>
void tem_func(int, const T&)
{
}

template<typename T>
void tem_func(double, const T&)
{
}


如何指定其中一个实例化呢?
比如我要实例化带double参数那个


//无法从“overloaded-function”转换为“void (__cdecl *)(double, int)
void (*pFunc)(double, int) = tem_func<int>;


我的理解是这样:
如果写tem_func<int>,只是指定了后面那个模板化的参数,没有指定第一个参数,在重载集合里面就既有tem_func(int, int)也有tem_func(double, int),所以编译器无法决议。

但是有没有什么技巧能够达到那个要求?
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
疾似云流 2009-11-19
  • 打赏
  • 举报
回复
惭愧……
看来《C++ Template》是该提上日程了。
疾似云流 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 supermegaboy 的回复:]

你直接调用就行了啊,tem_func( 10.0, 10 );
[/Quote]

有些时候、有些场合是不能直接调用的。
macrojj 2009-11-19
  • 打赏
  • 举报
回复
void (*pFunc)(double, const int&) = tem_func<int>;

编译器会通过你的参数表,找到你要的那个函数。
类似于类型推导。
飞天御剑流 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 chris17chen 的回复:]
有两个重载的模板函数,

C/C++ code
template<typename T>void tem_func(int,const T&)
{
}

template<typename T>void tem_func(double,const T&)
{
}

如何指定其中一个实例化呢?
比如我要实例化带double参数那个

C/C++ code//无法从“overloaded-function”转换为“void (__cdecl *)(double, int)void (*pFunc)(double,int)= tem_func<int>;

我的理解是这样:
如果写tem_func <int>,只是指定了后面那个模板化的参数,没有指定第一个参数,在重载集合里面就既有tem_func(int, int)也有tem_func(double, int),所以编译器无法决议。

但是有没有什么技巧能够达到那个要求?
[/Quote]

你直接调用就行了啊,tem_func( 10.0, 10 );
winnuke 2009-11-19
  • 打赏
  • 举报
回复
为什么不这么写?

template<typename T1, typename T2>
void tem_func(T1, const T2&)
{
}

void (*pFunc)(double, int) = tem_func<double, int>;
baihacker 2009-11-19
  • 打赏
  • 举报
回复
	 void (*pFunc)(double, const int&) = tem_func<int>;

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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