我有一个模板,它需要一个 char 参数,如:
A<'T'>
我将我的 T 存储在一个变量中,例如:
const char ch = str[0];
//str 是我程序中的一个字符串
constexpr char ch = str[0];
// 这对我也不起作用
我正在努力实现这一目标:
A<ch>();
我正在使用 gcc 4.7 并涉足 constexpr 但我无法完成这项工作
有什么办法让这个工作吗?任何帮助表示赞赏
这只有在一切都是常量表达式的情况下才有效:
constexpr char str[] = "Hello World";
constexpr char ch = str[0];
A<ch> x;
如果 的内容str
是在运行时定义的,那么就没有办法实现这一点。编译器要求您在编译期间设置模板值。
这就是为什么这是有效的:
A<'a'>();
因为'a'
是一个常数值,在编译过程中是已知的。但是这个:
void foo(const std::string &value) {
A<value[0]> t;
}
不是,因为value[0]
尽管 是一个常数值,但在编译期间是未知的。