如何使用independent_bits_engine定义要生成的位数?

时间:2017-03-29 09:35:29

标签: c++ boost

independent_bits_engine是模板类

template<
    class Engine, 
    std::size_t W, 
    class UIntType
> class independent_bits_engine;

第二个参数定义,需要生成多少位。我不知道它。我想在运行时向用户提出这个问题。怎么做?

2 个答案:

答案 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对象。