繁体   English   中英

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

[英]How to define number of bits to generate using independent_bits_engine?

Independent_bits_engine是模板类

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

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

你不能。 模板参数必须在编译时定义。

要变通解决此问题,您可以查看此帖子并回答: 在运行时指定模板参数

这个想法是使用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类就越多,编译的速度就越慢,因此您可能要改用完整的运行时解决方案。

就像MICRO一样,c ++模板在编译时进行了扩展: c ++模板说明Wikipedia

当您运行c ++程序时,模板参数已经确定。

因此,如果您坚持使用模板来实现dependent_bits_engine,则必须删除模板参数std :: size_tW。并且可以在运行时将大小参数传递给Independent_bits_engine对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM