如何用变量参数化类型? C ++

时间:2018-04-17 15:16:49

标签: c++

我有模板类:

template<typename T, int L>
class SomeClass{...}

然后我希望用户在创建对象时指定参数,比如在终端执行程序时添加参数,例如./a.out -i 20 SomeClass<int,20>./a.out -d 20 SomeClass<double,20> }。怎么做?

2 个答案:

答案 0 :(得分:1)

您要求模板在运行时可以实例化 ;使用C ++是不可能的。

您可以执行以下操作之一:

  1. 有一个工厂,以及预先实例化的有限数量的固定选项,例如:

    std::BaseOfSomeClass* = SomeClassFactory.construct(argv[0], std::stoi(argv[1]));
    
  2. 删除模板以支持SomeClass本身的某种运行时多态性。

  3. 切换到基于解释/虚拟机的语言或具有显式JITing的语言,您可以在其中执行此操作。

  4. 为C ++实现一个支持JIT的运行时环境...

答案 1 :(得分:0)

模板参数与普通参数的语法不同,突出显示它们是编译时参数。您无法在运行时指定它们。您必须在类的构造函数上使用普通参数。或者列举所有可能的情况(包括整数参数),如Slava指出的那样。