-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. from/where我可以在类中调用静态类方法吗?
- 2. 我可以从Worker线程调用静态类实例的静态方法吗?
- 3. 通过方法名称调用静态函数?
- 4. 通过名称调用非静态方法
- 5. 我可以通过ExternalInterface.call()方法调用匿名函数吗?
- 6. 按名称调用静态方法
- 7. 我可以通过表名获取模型类的名称吗?
- 8. 通过类名称调用类方法vs自我
- 9. 调用synchronized静态方法,那么可以访问其他静态方法吗?
- 10. 我可以在Java中创建另一个方法名称,因此可以通过自定义名称或所需的方法名称来调用它吗?
- 11. 创建实例以调用静态方法的模式名称
- 12. IWindsorContainer可以通过静态方法实例化吗?
- 13. 我可以使用内建名称作为Python类的方法名称吗?
- 14. 在java中的静态方法,我可以以非静态方式访问静态方法吗?
- 15. RTTI:我可以通过名称获取类型吗?
- 16. 我可以在Objective-C中内联静态类方法吗?
- 17. 调用静态类方法
- 18. 以静态方法调用?
- 19. 我可以找出我使用的方法的名称吗?
- 20. 通过代理通过发送调用静态通用方法
- 21. 从静态基类方法调用静态派生类方法
- 22. 我们可以通过js调用java方法吗?
- 23. 我可以通过数组调用一个方法吗?
- 24. 我可以通过意图调用按钮单击方法吗?
- 25. AS3通过静态类型的引用调用可能未定义的方法?
- 26. 在静态类上调用方法,因为它的类型名称和方法名称是字符串
- 27. 类名的静态方法?
- 28. singleton类可以静态吗?
- 29. 我可以在java的静态方法中使用非静态变量吗?
- 30. 通过Method.invoke()的静态方法调用给了我NPE
你当然可以使用模板元编程;但恐怕你正在考虑像Java/C#中的某种运行时反射,这在C++中根本无法实现。 –
无法真正通过C++中的类。有一些你可以玩的模板游戏,但是你最好走老派并传递一个指向静态方法的指针。需要更多关于你想要知道的信息。 – user4581301
那么他所说的反射级别(按名称调用函数)在C++中显然是可能的。无论如何,如果他不得不问这个问题,我不会推荐走这条路。为什么不只是像IParser {virtual void parse()= 0; }并让每个类实现IParser。那么你的泛型函数将会是简单的无效解析(IParser & p);或者你需要的。 如果你还需要别的东西,你需要更具体地说明你想要这样的东西是如何工作的 –