我有一个模板,它接受一个char参数:
A<'T'>
我将我的T存储在一个变量中:
const char ch = str[0];
// str是我程序中的一个字符串
constexpr char ch = str[0];
//这对我来说无效
我正在努力实现这一目标:
A<ch>();
我正在使用gcc 4.7并且涉及constexpr,但我还没有完成这项工作
是否有办法让这个工作? 任何帮助表示赞赏
答案 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]
,尽管是一个常数值,但在编译期间是不知道的。