- 论坛徽章:
- 0
|
这时是能正常运行的, 但是,如果my_func是一个模板就不行了.
比如:
template<typename T>my_func( T t){...}
这是不行的,不能用typeof(my_func<T>)做模板参数.
gcc确实比较怪...
不能用typeof(my_func<T>)做模板参数呢,但(my_func<T>)到底是什么类型呢???
void(*func)(float) = &my_func<float>; //正确
void(*func)(int) = &my_func<float>; //错误
可见,编译器并不是完全不能确认这个类型.
看来原因可能是函数模板可以在有多个参数时,只给出部分,另一部分可以由参数推导.
比如:
template<typename A1, typename A2> A1 cast( A2 a2);
这时,cast<float>是不能确认类型的, 必须经过调用, 那么, cast<float,int>是一定能知道类型的,
编译器也许无法知道所给出的模板参数无法确定类型??
那么, 把模板函数变成模板类会如何呢?? 模板类是由参数唯一确定的...
(不过目前的情况并不乐观..因为我需要让我的代码被nvcc编译过去..nvcc用了edg 4.1, 这个edg看上去不怎么样. 如果这种办法确实不行了, 那么如果谁有hack编译器前端的想法,或是实践, 能否指导一下??) |
|