使用模板自定义 RTTI 信息
Custom RTTI information using templates
我有SpiderMonkey API的包装类,我需要在其中定义具有特定签名的方法。我有一个基于模板的解决方案。基本上,我有几个模板方法来处理数百个包装器方法,如下所示(简化):
template <typename jsType, AIErr(*Type::*Method)()>
static bool ExecuteMethod(JSContext *cx, unsigned argc, JS::Value *vp)
{
...
}
我使用宏按如下方式使用它:
#define EXECUTE_METHOD_AIERR_X(TYPE, METHOD)
JS_FN(#METHOD, (js##TYPE::ExecuteMethod<js##TYPE, &TYPE::METHOD>), 0, 0)
如果我遇到需要调试的情况,为了知道在特定时间处理了哪个类(*Type)的哪个方法(*Method),我需要知道类型Type的名称以及该模板方法中方法的名称。由于SpiderMonkey的API的性质,我不能改变ExecuteMethod的参数,只能改变模板。
我见过这些:
C++ 获取模板中的类型名称
C++ 具有常量值的模板专用化
我已经尝试过这些,但解决方案在 MSVC C++ 2013 编译器的typeid(T).name()
步骤中对我来说失败了。另一方面,如何在方法上应用它?
此外,我看到这个:
template<typename T>
class TypeParseTraits{
public:
static const std::string name(){
return typeid(T).name();
}
};
#define REGISTER_PARSE_TYPE(X)
template<> class TypeParseTraits< X >
{ public: static const std::string name(){ return #X; } };
这是什么template<> class TypeParseTraits< X >
?覆盖?专业化?
如果我再次通过模板来执行此操作,则必须依赖于jsType,类型和方法。
我的问题是,我应该如何使用字符串实现(即使仅用于调试)RTTI 信息?如果有的话,最有效的选择是什么?
我知道简单的 char* 不是模板参数的选项。
谢谢。
"这个模板是什么<>类 TypeParseTraits
我的问题是,我应该如何使用字符串实现(即使仅用于调试)RTTI 信息?如果有的话,最有效的选择是什么?- RTTI 的最佳方法应该只是一些将返回例如字符串的虚拟方法。此方法应在所有派生类中重写(可以使用静态多态方法简化)并返回相应的信息。
我知道简单的字符不是模板参数的选项。 - 不是一般的,但是...
- 可以在结构或类中包含静态常量字符*数据
- 可以在模板的帮助下填写此数据
- 可以将此类结构作为模板参数传递并提取静态数据
- 如果成员是 constexpr,则可以手动填充此类字符串(尽管会受到一些处罚)
因此,您可以使用类型(可能是模板)将字符传递到其他模板中。
例:
template<class C>
struct Named { static const char* name; };
template<class C>
const char* Named<C>::name = typeid(C).name(); // fill as you wish
template<class N>
void print() { cout<< N::name <<endl;}
...
print<Named<int>>();
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何设置一个范围来提取我想要获得的信息
- dynamic_cast without RTTI
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 为什么 gcovr 会生成空覆盖率统计信息?
- 使用 RTTI 克隆唯一指针的向量
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- 从操作员内部获取有关对象的RTTI信息
- 使用模板自定义 RTTI 信息
- 使用条带是否删除二进制文件上的RTTI信息
- 如何从指针中知道 gcc 的 c++ 对象的 RTTI 信息"this"?
- 从函数返回后丢失RTTI信息