我希望能够做什么...
我有一个模板类,它根据作为类型参数传递的对象类型设置一个(命名的)共享内存池。我想知道,是否可能通过预处理器操作符或其他方式,有一种方法可以将类型名“字符串化”并附加一个标识符?
类似于语法的东西:<classtype>_identifier
Where MyClass<int>
would generate int_identifier
...
例如:
template<typename T>
class MyClass
{
private:
#define TYPENAME_STRING(s) T_#s
std::string m_typeName;
public:
MyClass(std::string objName = "ObjectName")
{
// This:
m_typeName = TYPENAME_STRING(objName.c_str());
// ...Obviously doesn't work, since this is the equivalent of typing:
m_typeName = "T_ObjectName";
// ...When what we really want is something like:
m_typeName = "int_ObjectName";
}
~MyClass();
};
让它工作对于完全基于作为类型参数传递的对象类型来命名、创建和管理伪唯一内存池很有用。
这样的事情可能吗?
此外,是否可以解析此类型名并将其添加到标识符而不被“字符串化”(即,创建一个名为 intObjectName
的 typedef )?