gpt4 book ai didi

c++ - std::common_type 的目的是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:51:34 27 4
gpt4 key购买 nike

我开始查看 std::common_type并且不确定它的用途和功能。有几件事让我觉得很奇怪:

  • 参数的顺序很重要:common_type<Foo, Bar, Baz>可能与 common_type<Baz, Foo, Bar> 不同.一个可能编译,另一个可能不编译。虽然从 common_type 的方式可以清楚地看到这一点被定义了,感觉很奇怪,不直观。这是因为缺乏通用解决方案还是有意为之?
  • 实例化可能会导致编译器错误,而不是我可以处理的错误。如何检查 common_type真的会编译吗? is_convertible还不够common_type可能是专业的?
  • 在这样的情况下仍然没有办法找出常见的类型:

    struct Baz;
    struct Bar { int m; };
    struct Foo { int m; };
    struct Baz { Baz(const Bar&); Baz(const Foo&); };

    推荐的解决方案是专门化 common_type这很乏味。有没有更好的解决方案?

有关引用,请参阅 N3242 中的 §20.9.7.6 表 57。

最佳答案

std::common_type被引入用于 std::duration --- 如果您添加 std::duration<int>std::duration<short>那么结果应该是 std::duration<int> .决定委托(delegate)一个单独的模板,该模板使用适用于 ?: 的核心语言规则找到结果,而不是指定无穷无尽的允许配对流。算术 if 运算符。

然后人们看到这个模板可能普遍有用,并将其添加为std::common_type , 并扩展为处理任意数量的类型。但在 C++0x 库中,它仅用于类型对。

您应该能够使用新的 SFINAE 规则来检测是否有 std::common_type 的某些实例化。已验证。不过我没试过。在大多数情况下,如果没有“通用类型”,那么无论如何您都无法做任何有意义的事情,因此编译错误是合理的。

std::common_type不是魔法 --- 它遵循 ?: 的规则.如果 true?a:b将编译,std::common_type<decltype(a),decltype(b)>::type会给你结果的类型。

关于c++ - std::common_type 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503773/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com