根据特殊条件定义功能类型

时间:2016-12-04 08:09:40

标签: c++

我想问一下, 正确且整洁的方式 来声明一个函数,其回归类型取决于条件。

这就是我在如此糟糕的情况下解决这个问题的方法(没有创建功能):

const QAudioFormat::SampleType signalSampleType;
typedef decltype(signalSampleType == QAudioFormat::Float ? float() : (signalSampleType == QAudioFormat::SignedInt ? int() : unsigned int())) sampleType;
std::vector<sampleType> rawSignalData;

这样会好吗,还是有更好的方法来做这些事情?

1 个答案:

答案 0 :(得分:3)

这是std::conditional

的用例
using sampleType = typename std::conditional<
                     signalSampleType == QAudioFormat::Float,
                     float,
                     typename std::conditional<
                       signalSampleType == QAudioFormat::SignedInt,
                       int, unsigned int>::type
                   >::type; 

使用c ++ 14可以减少丑陋:

using sampleType = std::conditional_t<
                     signalSampleType == QAudioFormat::Float,
                     float,
                     std::conditional_t<
                       signalSampleType == QAudioFormat::SignedInt,
                       int, unsigned int>
                   >