c++ - 以字符数组为参数的模板元编程

标签 c++ templates gcc c++11 metaprogramming

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

template <char x, char... c>
struct mystruct {
...
};

int main () {

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

}

它显然不会让我那样做,而且我认为在编译时使用用户定义的文字来转换“asdf”字符串会很幸运,但 GCC 4.3 不支持用户- 定义的文字...

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

最佳答案

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

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<g_unique_name> A_unique;

这将使您在编译时访问名称和唯一的实例化。但是,它不会让您在运行时访问单个字符。

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

关于c++ - 以字符数组为参数的模板元编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/711779/

相关文章:

c - gcc -O 段错误

C++ - 将 char 引用转换为 bool 引用 (std::vector<bool>)

c++ - 如何提高集成模型的推理时间

c++ - vector::constructor 的模板参数

c++ - VC++ 6.0 中的 Cfitsio 错误

使用类模板的 C++ 循环依赖 - 如何重构?

gcc - 如何在 NixOS 上生成静态可执行文件?

c - 使用 pragma 抑制 gcc 4.2.1 警告

c++运算符重载的多态性

c++ - 将 MATLAB 代码转换为 OpenCV C++