簡體   English   中英

C ++模板根據類型選擇代碼塊

[英]C++ template choose code block according to type

是否可以在C ++模板函數中根據參數的類型在編譯時啟用/禁用代碼塊?

(如果可能,我懷疑std::enable_if可能是解決方案的一部分,但我尚未看到如何在編譯時基於此選擇代碼塊。)

我正在尋找做這樣的事情。

template<typename T>
void captureData(T *data, size_t len, T scaleFactor)
{
    initCaptureDevice();

    for (size_t i = 0; i < len; i++)
    {
        IF(T is integral type) // determine at compile time which to use
        {
            data[i] = getRawSample();
        }
        ELSE
        {
            data[i] = getRawSample() * scaleFactor;
        }
    }

    cleanup();
}

這個:

template<typename T>
void captureData(T *data, size_t len, T scaleFactor, int anotherParam)
{
    initCaptureDevice();

    for (size_t i = 0; i < len; i++)
    {
        if(std::is_integral<T>::value) // determine at compile time which to use
        {
            data[i] = getRawSample();
        }
        else
        {
            data[i] = getRawSample() * scaleFactor;
        }
    }
    cleanup();
}

會很好地工作-編譯器將刪除if(constexpr) ... else ...;未使用的分支的代碼if(constexpr) ... else ...;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM