【发布时间】:2016-08-31 13:08:22
【问题描述】:
所以我正在设计一种my_numeric_cast 函数来限制使用我正在编写的框架时可用的转换类型。
做这样的事情很简单
template<typename To, typename From>
constexpr To my_numeric_cast(From);
template<>
constexpr float my_numeric_cast<float, int>(int i) { return i; }
这很有效,只要使用强制转换,就只允许从整数转换为浮点数。每当尝试进行不在白名单中的强制转换时,就会产生链接错误。
但是,我真的很想让它成为编译错误,以便更快地发现误用。
如何使基本模板主体有效,在实例化时期望?
【问题讨论】:
-
为什么要使用模板?您可以添加重载,如果它们调用不存在的重载,则会出现编译器错误。
-
@NathanOliver,您不能重载函数的返回类型。这往往会导致歧义。
标签: c++ template-meta-programming sfinae