我有以下代码:如何使用sfinae来检查,类型是否有operator()?
template <typename T>
struct function_traits
{
typedef decltype(&T::operator()) test_type;
typedef std::true_type res_type;
};
template <typename T>
struct function_traits
{
typedef std::false_type res_type;
};
换句话说,我想知道的类型是否有运营商()。我认为我可以使用SFINAE的方式来做到这一点。但编译器会告诉:
'function_traits':类模板已经定义。
这样的代码有什么问题?
P.S:这里是简单的用法:
auto f1 = [](const int a){ std::cout << a << std::endl; };
function_traits<decltype(f1)>::res_type;
auto f2 = false;
function_traits<decltype(f2)>::res_type;
编辑:我使用C++ 11标准
如果你需要这个实际使用,而不是教育的目的'std :: is_callable'应该适合你。 – user2176127
@ user2176127,哦,谢谢,这很有趣。但我对教育目的感兴趣。而且我很抱歉,我想用C++ 11标准(我编辑过的问题) – LmTinyToon
这个工作吗? (我不知道)http://stackoverflow.com/questions/257288 – javaLover