【问题标题】:Is there a standard construct for 'choose<bool,typename,typename>'?'choose<bool,typename,typename>' 是否有标准构造?
【发布时间】:2011-09-17 20:54:11
【问题描述】:

我有时会发现自己需要以下几点:

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 has something similar,但这并不完全相同(采用类型,而不是布尔值),我不想为这个小东西包括 Boost。 :)

【问题讨论】:

    标签: c++ templates metaprogramming conditional


    【解决方案1】:

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

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

    【讨论】:

    • 完美,这正是我想要的。 :) 现在只是一个小模板 typedef 来缩短它......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多