当前位置:  开发笔记 > 编程语言 > 正文

使用Char数组作为参数的模板元编程

如何解决《使用Char数组作为参数的模板元编程》经验,为你挑选了2个好方法。

我在GCC 4.3.2的C++ 11的半实现中玩TMP,我想知道是否有办法以某种方式执行以下操作:

template 
struct mystruct {
...
};

int main () {

   mystruct<"asdf">::go();

}

它显然不会让我这样做,我认为通过在编译时使用用户定义的文字转换"asdf"字符串我会很幸运,但GCC 4.3不支持用户定义的文字...

有什么建议?我宁愿不做'a','s','d','f',因为这严重妨碍了我对这个项目的计划.



1> deft_code..:

我解决了类似的问题.我们需要为每个名称使用不同的类型

template< const char* the_name >
class A
{
    public:
    const char* name( void )
    {
        return the_name;
    }
};

extern const char g_unique_name[]; // defined elsewhere
typedef A A_unique;

这将为您提供编译时访问名称和唯一实例化.但是,它不允许您在运行时访问单个字符.

如果您想要单独的角色访问,实现它的唯一方法是使用用户定义的文字.C++ 0x将被扩展为允许上面的main函数中的语法,但它仍然会将模板绑定到不是编译时字符数组的字符指针.



2> Dan Olson..:

遗憾的是,您仍然需要将其拆分为单独的字符,例如:

myTemplate<'s','t','r','i','n','g'>

在我看来,这是新标准的一个巨大疏忽.其他一些人同意了,并试图在GCC中实现这种行为并取得了相当不错的结果.你可以在这里找到那个帖子.

编辑:链接有些奇怪的问题,所以剪切和粘贴:

http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/9b0edd169ba2ce3c

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有