Joe*_*Joe 3 c++ templates c++11
假设我有一个模板函数,如:
template<typename T, typename DType=uint32_t>
void fun(T a) {
//...
// DType is used inside
}
Run Code Online (Sandbox Code Playgroud)
我如何指定类型DType
,但是T
可以由编译器推断,例如:
fun<DType=int32_t>(static_cast<std::string>(s));
Run Code Online (Sandbox Code Playgroud)
正如你所写,你做不到.你最好的选择是交换类型,让编译器推断出类型T
,比如
template<typename DType=uint32_t, typename T>
void fun(T a) {
//...
// DType is used inside
}
Run Code Online (Sandbox Code Playgroud)
编译器将相应地推断出类型T
.
例
#include <iostream>
template<typename DType = uint32_t, typename T>
void fun(T a) {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
int main()
{
fun<char>(42); // T is deduced as int, DType as char
}
Run Code Online (Sandbox Code Playgroud)
正如@TC在评论中提到的那样:"与类模板不同,不要求函数模板的默认模板参数在尾随模板参数上."