【发布时间】:2009-08-10 22:06:41
【问题描述】:
假设我有一个宏 FOO(name) 和一些模板类 Bar,它接受一个参数(问题是什么类型的参数)。每次我用不同的名称调用 FOO 时,我都想获得 Bar 的不同实例化。 Bar 模板实际上并不需要能够在内部获取名称,我只需要确保不同的名称创建 Bar 的不同实例并且始终使用相同的名称(即使在不同的翻译单元中)获取 Bar 的同一个实例。所以这是一个粗略的第一次尝试:
template<const char* x>
class Bar
{
//... stuff
};
#define FOO(name) Bar<#name>
这可行,除了 char 字面量不能作为模板参数传递,因为它们没有外部链接。如果预处理器中有某种方法可以得到一个一致的“名称”哈希,那么一个 int(然后可以传递给模板)就可以了,但我看不出有任何方法可以做到这一点。
想法?
【问题讨论】:
-
你到底想做什么?
-
对 C++ 语言的可笑滥用 ;) 这将成为即将发布的开源库的一部分,一旦发布,我将在此处发表评论,以便您查看 ;)
-
这在 1.2 版中用于开源 Toast 库的 TOAST_STATIC_INIT_PROTECTED 实现中。文档链接:toast.sourceforge.net/…
标签: c++ templates c-preprocessor