是否有“choose”的标准构造?

发布于 2024-11-15 20:37:22 字数 448 浏览 1 评论 0原文

我有时发现自己需要以下内容:

template<bool B, typename T1, typename T2>
struct choose{
  typedef T1 type;
};

template<typename T1, typename T2>
struct choose<false, T1, T2>{
  typedef T2 type;
};

我用它来有条件地选择一种类型或另一种类型。现在,标准库中是否已经有一些东西可以做到这一点? Boost.MPL 有类似的东西,但这并不完全相同(采用类型,而不是布尔值),并且我不想为这个小东西包含 Boost 。 :)

I sometimes find myself in need for the following:

template<bool B, typename T1, typename T2>
struct choose{
  typedef T1 type;
};

template<typename T1, typename T2>
struct choose<false, T1, T2>{
  typedef T2 type;
};

I use this to conditionally choose one type or the other. Now, is there already something in the standard library that does exactly this? Boost.MPL has something similar, but that isn't exactly the same (takes a type, not a bool) and I don't want to include Boost for this little thing. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

記憶穿過時間隧道 2024-11-22 20:37:22

是的:它在 C++0x 中称为 std::conditional(或在 Boost 中称为 boost::conditional)。

您引用的 boost::mpl::if 具有相应的 boost::mpl::if_c,它采用 bool 而不是类型;这是 Boost 类型特征库中的常见模式。

Yes: it is called std::conditional in C++0x (or boost::conditional in Boost).

The boost::mpl::if that you cite has a corresponding boost::mpl::if_c that takes a bool instead of a type; this is a common pattern in the Boost type traits libraries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文