标题==问题。
非常具体,是否可以像这样实现std :: sinh?
namespace std {
long double sinh(const long double arg) {
template <long double _arg> long double _sinh() {
// sinh implementaion here
}
template <> long double _sinh<0>() {return 0;}
template <> long double _sinh<-0>() {return -0;}
template <> long double _sinh<INFINITY>() {return INFINITY;}
template <> long double _sinh<-INFINITY>() {return -INFINITY;}
return _sinh<arg>();
}
}
我知道,这是一个愚蠢的想法,但我真的很好奇。
答案 0 :(得分:2)
是否可以在函数范围内声明/实现模板?
没有。 [温度] / P2:
template-declaration 只能作为命名空间范围或类范围声明出现。
以免你认为这允许本地类中的模板声明,[temp.mem] / p2:
非闭包类型的本地类不应具有成员模板。
您的代码还存在各种其他问题,其中两个问题在Mike Seymour的回答中有所提及。
虽然sinh
之类的东西可以作为constexpr
函数实现,但如果参数是常量表达式,则允许在编译时进行评估。
答案 1 :(得分:1)
有两个问题: