說我們有N
功能overrites,我們收到argunments陣列,解析它變成某些類型的(說我們第一次得到int
,string
,string
;第二次我們得到int
,int
,int
);現在我們要求第一組參數我們的call(int, string, string)
而第二次call(int, int, int)
。我們可以檢測哪些函數需要動態調用參數類型數組?我們可以通過運行時給出的參數來檢測要調用的函數嗎?
回答
在運行時,您不能在C++中進行類型選擇。這是因爲C++是Strongly typed語言之一。
你可以做一些類似於你在例如Python--變量在運行期間很樂意改變它們的類型。
您可以使用繼承類和派生類關閉 - 但不完全相同。如果你有一個超類,你可以有一個「工廠」函數返回一個指向超類的指針(根據某些輸入包含一個diff對象)。現在,如果所有對象都實現了所需的功能,則可以在指針上調用一個函數。例如:
class Base{
virtual void functionality();
};
class Squirrel : public Base{
void functionality() {
std::cout << "I love hazelnuts!" << std::endl;
}
};
class Box : public Base{
void functionality() {
std::cout << "Stuff can be put in here!" << std::endl;
}
};
Base *factoryMethod(std::string someInput){
if (someInput == "1")
return new Squirrel();
else
return new Box();
}
int main(void){
std::cin >> input;
Base *object = factoryMethod(input);
object->functionality();
return 0;
}
除非您剛剛分析了一段文本,建立了該文本中條目的類型並運行了if語句的加載並適當地解除了參數。但誰知道OP正在嘗試做什麼! – Rook
@即使如此,你不能有一個函數'if(arg_is_int)return(int)(value);否則返回(字符串)值;'。所有類型都是在編譯時預先確定的! – penelope
'vector
你可以簡單地寫一個帶有相關參數的重載成員函數嗎?
如果您收到未知數量的參數,並希望根據它們調用正確的函數,那麼您將需要一些額外的工作。也許有一個枚舉作爲第一個參數暗示參數集例如:
enum eParamList
{
eParamList_START,
IntIntInt, // following data is 3 ints
IntIntChar, // following data is int, int, bool (only joking its a char)
eParamList_ENDS
}
或者類似的東西?
這是低技術的做法。我不清楚你的意思是由參數類型數組,但假設給出了一種稱爲args
的向量,並且可以確定一個元素是否爲數字,然後將該元素轉換爲數字或字符串。然後,你可以實現這樣一個循環:
std::string s[3];
int n[3];
unsigned mask = 0;
for (int i = 0; i < args.size(); ++i) {
if (is_number(args[i])) {
mask |= (1U << i);
n[i] = get_number(args[i]);
} else {
s[i] = get_string(args[i]);
}
}
然後,在掩蔽用開關:
switch (mask) {
case 0x01: call(n[0], s[1], s[2]); break;
case 0x07: call(n[0], n[1], n[2]); break;
default:
std::cout << "unhandled combination: " << mask << std::endl;
break;
}
- 1. 我們可以給參數回調嗎?
- 2. 我們可以在Java中的函數中調用函數嗎?
- 3. 我們可以從函數調用存儲過程嗎?
- 4. 我們可以停止構造函數的運行嗎?
- 5. 我們可以說「將函數指針作爲參數傳遞給函數稱爲回調函數」嗎?
- 6. 我們可以用Struts2中的參數調用方法嗎?
- 7. 我可以通過beforeSend事件更改jQuery.ajax的函數調用參數(通過數據發送)嗎?
- 8. knockoutjs:我們可以使用參數創建dependentObservable函數嗎?
- 9. 我可以通過更多參數來優化()函數在R
- 10. 我可以通過編譯來改進python運行時嗎?
- 11. 我們可以使用範圍數組來調用角度函數嗎?
- 12. 我可以通過ExternalInterface.call()方法調用匿名函數嗎?
- 13. 我可以在f#中通過名稱調用函數嗎?
- 14. 我可以通過DataTrigger(XAML)調用函數嗎?
- 15. 我可以調用嵌套函數進行單元測試嗎?
- 16. 我們可以調用一個類的構造函數嗎?
- 17. 我們可以將參數傳遞給C中的信號嗎?
- 18. 我們可以發送一個參數給C#中的TestInitialize嗎?
- 19. 我們可以將參數傳遞給SQL中的視圖嗎?
- 20. 我可以在運行時找到由某個事件調用的函數嗎?
- 21. 我可以通過maven運行特定的testng測試組嗎?
- 22. 我可以使用通用約束來啓用參數化構造函數嗎?
- 23. 我們應該通過引用函數標記調用嗎?
- 24. 可以將可變數量的參數傳遞給函數嗎?
- 25. 我們可以檢查由Cypher或Gremlin生成的翻譯函數調用嗎?
- 26. 你可以在函數中通過cfscript做可選參數嗎?
- 27. 我可以檢測一個magento函數是否作爲API調用運行?
- 28. 我們可以通過Apache Jmeter進行ESB測試嗎?
- 29. 我們可以通過並超過django built_in方法參數的值嗎?
- 30. 我們可以將null參數傳遞給sql參數來查詢所有的參數嗎?
你是什麼意思「解析參數數組」?你是否收到一個你正試圖轉換爲整數和子串的字符串? – Rook
這是函數模板的用途。如何結束,在函數中完成的操作必須由實例化類型支持。但模板是一個編譯時間的概念。我不明白朮語「參數類型數組」。 – Mahesh