decltype(...,void())和void_t之间的区别 [英] Difference between decltype (..., void()) and void_t
本文介绍了decltype(...,void())和void_t之间的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
最后一次我创建了许多关于SFINAE的建议使用void_t帮助。但我似乎不明白什么是这么特殊的关于decltype(...,void())。
考虑示例:
Last time I'm founding many answers regarding SFINAE which suggest using void_t helper. But I seems to not understand what's so special about it in regard to decltype (..., void()). Consider the example:
template <typename...>
using void_t = void;
template <typename T, typename = void>
struct has_foo : std::false_type {};
template <typename T>
struct has_foo <T, decltype (T().foo(), void())> : std::true_type {};
template <typename T, typename = void>
struct has_bar : std::false_type {};
template <typename T>
struct has_bar <T, void_t <decltype (T().bar())> > : std::true_type {};
class MyClass1
{
public:
int foo() { return 3; }
};
class MyClass2
{
public:
double bar() { return 5.4; }
};
int main() {
std::cout << has_foo<MyClass1>::value << std::endl;
std::cout << has_foo<MyClass2>::value << std::endl;
std::cout << has_bar<MyClass1>::value << std::endl;
std::cout << has_bar<MyClass2>::value << std::endl;
return 0;
}
输出是两个traits的预期,这让我认为两个实现是相同的。我缺少什么?
谢谢。
The output is as expected for both traits, which makes me think that both implementations are the same. Am I missing something? Thank you.
推荐答案
这是一个更具表现力,较不繁琐的说法。
It's a more expressive, less cumbersome way of saying the same thing.
就是这样。
这篇关于decltype(...,void())和void_t之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文