decltype(...,void())和void_t之间的区别 [英] Difference between decltype (..., void()) and void_t

查看:422
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆