最近遇到一个场景是这样子的:如果类型为Int就执行一个函数,这个函数是无参的且返回值是void,如果是double就执行另一个无参且返回值为void的函数,其它类型再执行一个默认的无参且返回值是void的函数。
template<typename T, typename E = void>
struct zoo
{
void operator()()
{
std::cout << "Default Fn" << std::endl;
}
};
template<typename T>
struct zoo<T, typename std::enable_if<
std::is_same<T, int>::value
>::type>
{
void operator()()
{
std::cout << "int Fn" << std::endl;
}
};
template<typename T>
struct zoo<T, typename std::enable_if<
std::is_same<T, double>::value
>::type>
{
void operator()()
{
std::cout << "double Fn" << std::endl;
}
};
int main()
{
zoo<int>()();
zoo<double>()();
zoo<long>()();
getchar();
return 1;
}