例如,我有以下模板函数:
template<class IntType = typename boost::uintmax_t>
IntType someFunnyFunc(IntType x, IntType y, IntType z) { ... }
现在我有以下代码:
int main() {
short a=1, b=2, c=3;
someFunnyFunc(a, b, c);
return 0;
}
所有编译器都会生成函数吗
boost::uintmax_t someFunnyFunc(boost::uintmax_t x, boost::uintmax_t y, boost::uintmax_t z) { ... }
,因为short可以转换为boost::uintmax_t,或者一些编译器会生成
short someFunnyFunc(short x, short y, short z) {...}
我需要这个,因为我的算法使用循环,当我使用短整数而不是大整数时,循环更频繁。
你可能会问,为什么我不简单地定义boost::uintmax_t someFunnyFunc(boost::uintmax_tx, boost::uintmax_t y, boost::uintmax_tz) { ... }
自己并完成它。我这样做是因为我想让使用自定义整数类型成为可能,这样可以使用平台不直接支持的更大整数。
编辑: 这能解决我的问题吗:
template<class IntType>
IntType someFunnyFunc(IntType x, IntType y, IntType z) { ... }
boost::uintmax_t someFunnyFunc(boost::uintmax_t x, boost::uintmax_t y, boost::uintmax_t z) {
return someFunnyFunc<boost::uintmax_t>(x, y, z);
}