independent_bits_engine是模板类
template<
class Engine,
std::size_t W,
class UIntType
> class independent_bits_engine;
第二个参数定义,需要生成多少位。我不知道它。我想在运行时向用户提出这个问题。怎么做?
答案 0 :(得分:0)
你做不到。必须在编译时定义模板参数。
要解决此问题,您可以查看此信息并回答:Specify template parameters at runtime
我们的想法是使用if
语句来检查运行时值:
template<class Engine, class UIntType>
independent_bits_engine CreateEngine(std::size_t w) {
if (w == 0) {
return independent_bits_engine<Engine, 0, UIntType>();
} else if (w == 1) {
return independent_bits_engine<Engine, 1, UIntType>();
}
Etc;
}
如果W
可能是一个很大的值,您可能希望使用boost::preprocessor
生成ifs(链接中给出的示例)。
请注意,W
的最大值越大,实例化的independent_bits_engine
类越多,编译速度越慢,因此您可能希望切换到完整而不是运行时解决方案。
答案 1 :(得分:0)
c ++模板在编译时扩展,就像MICRO一样: c++ template explanation wikipedia
运行c ++程序时,模板参数已经确定。
因此,如果您坚持使用模板来实现independent_bits_engine,则必须删除模板param std :: size_t W. 并且你可以在运行时将size参数传递给independent_bits_engine对象。