cle*_*oap 6 c++ static types class
在静态成员函数内部,我需要获取类型.
class MyClass
{
public:
static void myStaticFunc();
...
};
Run Code Online (Sandbox Code Playgroud)
然后在我想要的实现中:
void MyClass::myStaticFunc()
{
// Get MyClass as a type so I can cast using it
(get_type_from_static_function()*)someOtherVariable;
}
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?通常情况下,我会在一个对象上使用来自typeinfo的东西,但我没有这个可以使用.
我不想只是使用(MyClass*)因为这是在宏内部,我想尽可能简单,以便可以在没有类名的情况下调用它.
如果它有助于我使用QT但我找不到任何宏来获得当前的类.它不一定需要是程序化的 - 它可以是一个宏.
干杯!
编辑:这是实际的宏功能:
#define RPC_FUNCTION(funcName) \
static void rpc_##funcName(void* oOwner, RpcManager::RpcParamsContainer params){ ((__class__*)oOwner)->funcName(params); }; \
void funcName(RpcManager::RpcParamsContainer params);
Run Code Online (Sandbox Code Playgroud)
然后我RPC_FUNCTION(foo)在一个类声明中调用.我想__class__成为我所处的任何类声明.我很清楚我可以在funcName之后添加className但我想在实际使用它时尽可能简单.我的RPC管理器调用rpc_foo并传递指向我声明它的类的对象的指针.基本上我需要知道如何确定该void*参数的实际类.
我相信您内心的要求根本不可能:C++ 是一种静态类型语言,这意味着所有类型信息都必须在编译时可用(尽管有运行时多态性)。也就是说,当你说,
T x;
Run Code Online (Sandbox Code Playgroud)
那么类型T 必须在编译时已知。不存在“”这样的东西,变量的T_from_user() x;实际类型是在运行时确定的。该语言并不是这样设计的。
通常,如果你问这样的问题,就表明你以错误的方式解决问题。多态情况的典型解决方案涉及类继承和虚函数,或其他类型的查找表,或实际上许多不同的方法。您对预处理器宏的请求也表明某些内容已关闭。任何编程语言都有其惯用法,偏离这些惯用法通常是一个坏主意。
| 归档时间: |
|
| 查看次数: |
3220 次 |
| 最近记录: |