我有模板类:
template<typename T, int L>
class SomeClass{...}
然后我希望用户在创建对象时指定参数,比如在终端执行程序时添加参数,例如./a.out -i 20
SomeClass<int,20>
或./a.out -d 20
SomeClass<double,20>
}。怎么做?
答案 0 :(得分:1)
您要求模板在运行时可以实例化 ;使用C ++是不可能的。
您可以执行以下操作之一:
有一个工厂,以及预先实例化的有限数量的固定选项,例如:
std::BaseOfSomeClass* = SomeClassFactory.construct(argv[0], std::stoi(argv[1]));
删除模板以支持SomeClass本身的某种运行时多态性。
切换到基于解释/虚拟机的语言或具有显式JITing的语言,您可以在其中执行此操作。
为C ++实现一个支持JIT的运行时环境...
答案 1 :(得分:0)
模板参数与普通参数的语法不同,突出显示它们是编译时参数。您无法在运行时指定它们。您必须在类的构造函数上使用普通参数。或者列举所有可能的情况(包括整数参数),如Slava指出的那样。