【发布时间】:2018-10-10 17:19:39
【问题描述】:
伙计们。我有一种情况,模板参数取决于运行时间。 我的功能:
string DecToBin(int num)
{
bitset<(num < 256 ? 8 : 32)> bits(num);
return bits.to_string();
}
所以,它不能确定编译。除了下面的示例之外,还有什么解决方案? 谢谢
string DecToBin(int num)
{
if(num < pow(2, 8))
{
bitset<8> bits(num);
return bits.to_string();
} else if(num < pow(2, 16))
{
bitset<16> bits(num);
return bits.to_string();
} else if(num < pow(2, 32))
{
bitset<32> bits(num);
return bits.to_string();
} else
{
bitset<64> bits(num);
return bits.to_string();
}
}
【问题讨论】:
-
模板参数永远不能依赖运行时信息。
-
@FrançoisAndrieux,是的,我知道。我只是不喜欢附加示例之类的决定
-
谈论“附加”示例。它的文字。将其作为 TEXT 复制到您的问题中!
-
@Swordfish,完成
-
这看起来像是一个 XY 问题。你真正想做什么?关于如何使代码高效,没有通用的答案。我敢打赌,分支带来的性能损失超过了仅对所有
ints 使用bitset<32>的损失。
标签: c++ templates compile-time-constant