我對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