【发布时间】:2018-04-07 01:33:32
【问题描述】:
我指的是这个例子SFINAE example,
我已尝试运行示例,
//enable_if
template<bool, typename T = void>
struct enable_if {};
template <typename T>
struct enable_if<true, T> {
using type = T;
};
template <typename T>
void do_stuff(typename enable_if<std::is_integral<T>::value, T>::type &t) {
std::cout<< "Integral selected "<<std::endl;
}
template <typename T>
void do_stuff(typename enable_if<std::is_class<T>::value, T>::type &t) {
std::cout<<"Class selected " <<std::endl;
}
int main()
{
int t =25;
do_stuff(t);
return 0;
}
但这不会编译,我可以知道为什么吗?
【问题讨论】:
-
我相信它们是相关但不同的问题。
-
@NicolasTisserand 不同的问题如何?它们是相同的问题。
-
OP 询问了他自己的自定义
enable_if实现。其他问题与来自<type_traits>的标准enable_if_t相关。但最终的答案确实是相似的。 -
@NicolasTisserand 这正是实现
enable_if的方式——OP 没有使用std版本的事实与问题无关。
标签: c++ c++11 templates template-meta-programming sfinae