c ++模板参数中的常量表达式

时间:2012-04-26 16:31:29

标签: c++ templates gcc c++11

我有一个模板,它接受一个char参数:

A<'T'>

我将我的T存储在一个变量中:

const char ch = str[0]; // str是我程序中的一个字符串

constexpr char ch = str[0]; //这对我来说无效

我正在努力实现这一目标:

A<ch>();

我正在使用gcc 4.7并且涉及constexpr,但我还没有完成这项工作

是否有办法让这个工作? 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:5)

这只有在所有是一个常量表达式时才有效:

constexpr char str[] = "Hello World";
constexpr char ch = str[0];
A<ch> x;

答案 1 :(得分:1)

如果str的内容是在运行时定义的,那么就没有办法实现。编译器需要在编译期间设置模板值。

这就是为什么这是有效的:

A<'a'>();

由于'a'是一个常量值,因此在编译期间是已知的。但是这个:

void foo(const std::string &value) {
    A<value[0]> t;
}

不是,因为value[0],尽管是一个常数值,但在编译期间是不知道的。