在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();
}
答案 0 :(得分:5)
这:
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 ...;