[英]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.