-1
A
回答
-1
你只需要使用scope resolution operator ::與公開它的類名來限定方法:
類::方法();
+0
不是downvoter,但他不是簡單地問'你怎麼稱呼靜態功能' – George
0
在我看來,這個問題非常廣泛。我不確定你到底是什麼,但這裏有一些選項:
有一個像所有子類必須實現的常見接口,如IParser(在這種情況下,一個方法解析)。你可以有一個功能需要IParser &。
如果你真的像'某個名稱的呼叫'之類的某種形式的RPC比我會建議另一種方法,你必須手動註冊函數到某種需要一個指針函數作爲值的映射,和類的名稱作爲關鍵。比調用這個函數更容易map[fnName]();
0
C++沒有內置的反射機制。如果您對通過其字符串表示法調用方法感興趣,則需要親自處理name -> method pointer
映射。在這種情況下,std::unordered_map
,std::string
和std::function
可能會有所幫助。
示範性的C++代碼11:
#include <iostream>
#include <unordered_map>
#include <string>
#include <functional>
struct Foo {
static std::unordered_map<std::string, std::function<void(void)>> functions;
static void bar() {
std::cout << "Foo::bar called" << std::endl;
}
static void init() {
functions["bar"] = &Foo::bar;
}
};
std::unordered_map<std::string, std::function<void(void)> Foo::functions;
int main() {
Foo::init();
Foo::functions["bar"]();
}
然而,如果你不感興趣的字符串調用方法只有你想打電話給定名稱的具體方法,你可以使用模板玩:
#include <iostream>
struct foo {
static void bar() {
std::cout << "foo::bar called" << std::endl;
}
};
template <class T>
struct tag{};
template <class T>
void call_bar(tag<T>) {
T::bar();
}
int main() {
call_bar(tag<foo>{});
}
相關問題
- 1. 我可以通過靜態方法調用CakePHP驗證嗎?
- 2. from/where我可以在類中調用靜態類方法嗎?
- 3. 我可以從Worker線程調用靜態類實例的靜態方法嗎?
- 4. 通過方法名稱調用靜態函數?
- 5. 通過名稱調用非靜態方法
- 6. 我可以使用字符串方法名稱調用c#動態方法嗎?
- 7. 我可以通過ExternalInterface.call()方法調用匿名函數嗎?
- 8. 帶有可變類名稱和名稱空間的PHP靜態方法調用
- 9. free_function可以是靜態類方法嗎?
- 10. 爲什麼可以調用非靜態類的靜態方法?
- 11. 按名稱調用靜態方法
- 12. 我可以通過表名獲取模型類的名稱嗎?
- 13. 的Python:可以從類中調用靜態方法,而不必限定名稱
- 14. java中的靜態方法可以調用非靜態方法
- 15. 我可以在f#中通過名稱調用函數嗎?
- 16. 是否有可能通過靜態方法OCMock類調用?
- 17. 我可以通過提供方法本身來獲取方法的名稱嗎?
- 18. 動態調用/調用由它的靜態方法的名稱
- 19. 我可以使用類方法來設置靜態變量嗎?
- 20. 我們可以在抽象類中使用靜態方法嗎?
- 21. 靜態方法可以作爲公共方法調用嗎?
- 22. 你可以在靜態方法中調用非靜態方法嗎?
- 23. 調用synchronized靜態方法,那麼可以訪問其他靜態方法嗎?
- 24. 我可以在Java中創建另一個方法名稱,因此可以通過自定義名稱或所需的方法名稱來調用它嗎?
- 25. 創建實例以調用靜態方法的模式名稱
- 26. IWindsorContainer可以通過靜態方法實例化嗎?
- 27. 我可以知道調用JNI C方法的類的名稱嗎?
- 28. 我可以使用內建名稱作爲Python類的方法名稱嗎?
- 29. 通過靜態類型的引用調用可能未定義的方法類
- 30. 在java中的靜態方法,我可以以非靜態方式訪問靜態方法嗎?
你當然可以使用模板元編程;但恐怕你正在考慮像Java/C#中的某種運行時反射,這在C++中根本無法實現。 –
無法真正通過C++中的類。有一些你可以玩的模板遊戲,但是你最好走老派並傳遞一個指向靜態方法的指針。需要更多關於你想要知道的信息。 – user4581301
那麼他所說的反射級別(按名稱調用函數)在C++中顯然是可能的。無論如何,如果他不得不問這個問題,我不會推薦走這條路。爲什麼不只是像IParser {virtual void parse()= 0; }並讓每個類實現IParser。那麼你的泛型函數將會是簡單的無效解析(IParser & p);或者你需要的。 如果你還需要別的東西,你需要更具體地說明你想要這樣的東西是如何工作的 –