2016-12-04 73 views
1

我想問一下,這是正確和整潔的方式來聲明一個函數,這是returntype依賴於一個條件。根據特殊條件定義功能類型

這就是我在這樣惡劣的情況下解決了這個問題(而無需創建一個函數):

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

那是要罰款,或是否有更好的方式來做出這樣的事情?

回答

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> 
        > 
+0

哇,非常快的答案:)!非常感謝 :)! –