1

我有一个模板,它需要一个 char 参数,如:

A<'T'>

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

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

constexpr char ch = str[0];// 这对我也不起作用

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

A<ch>();

我正在使用 gcc 4.7 并涉足 constexpr 但我无法完成这项工作

有什么办法让这个工作吗?任何帮助表示赞赏

4

2 回答 2

5

这只有在一切都是常量表达式的情况下才有效:

constexpr char str[] = "Hello World";
constexpr char ch = str[0];
A<ch> x;
于 2012-04-26T16:34:19.497 回答
1

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

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

A<'a'>();

因为'a'是一个常数值,在编译过程中是已知的。但是这个:

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

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

于 2012-04-26T16:34:27.130 回答