常量表达式
问题描述:
我有一个模板,采用一个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]
尽管是一个恒定值,在编译期间是不知道。
你想通过字符串指定TYPE吗?如果是这样,那是不允许的。如果您的问题不同,请澄清。例如,“矢量”和“矢量”之间存在巨大差异。第一个很好。第二不是。 –
2012-04-26 16:33:37
@凯文:'sometemplate '和'sometemplate '之间也有很大的区别。 ; - ]'vector '是一个不好的例子,因为它只接受类型,但非类型模板参数对整型类型是合法的。 – ildjarn 2012-04-26 17:22:38
@ildjarn - 我对模板不了解的内容可能会填满一本书(可能也会这样,我需要一本好书),但我知道如果他们试图通过内容指定模板的类型字符串,这样的事情是“不正确的”。 – 2012-04-26 17:47:39