我对C++很陌生,我试图实现一些有点棘手的事情,对此我似乎找不到可以满足的解决方案。在运行时模板实例化和功能选择
比方说,我有这两个功能:
template <class T1, class T2> void foo(T1 param1, T2 param2){...};
template <class T1, class T2> void bar(T1 param1, T2 param2){...};
并在运行时,我希望选择在这两个函数,并从用户输入获得了一些模板类型实例化,说一个char c
。所以,我可以这样做:
double d;
float f;
switch(c) {
case 'a':
foo(d, f); break;
case 'b':
foo(f, d); break;
case 'c':
bar(d, f); break;
case 'd':
bar(f, d); break;
但是这种解决方案是丑陋的,不可扩展的(我希望能够增加更多的功能,更多的模板参数)等。还有,我看不到方式将foo
或bar
的功能之一分配给函数指针,因为模板参数在运行时前是未知的。
所以如果有人能够为我提供一个很好的,干净的解决方案来解决这个问题,我会非常高兴!干杯。
编辑让我澄清一些事情。
我正在访问二进制文件,其中的数据可以存储为floats
或doubles
。显然,程序无法知道这种类型,所以用户必须以某种方式指定它。
然后必须对从文件加载的数据进行一些数学计算。并且有几种可能的计算,上面由foo
和bar
功能表示。
所以我希望用户能够在运行时指定数据类型的文件中,然后选择功能在运行时也应用于加载的数据。 switch(c)
只是我认为用户可以选择这些东西的一个例证。
你可以给它是什么你想达到某种背景? – 2014-10-29 10:16:30
调用应遵循的模式究竟是什么(相对于'c')? – Columbo 2014-10-29 10:18:50
模板在运行时不起作用。你可以创建一个'unordered_map'并根据该键调用它。 –
2014-10-29 10:20:31