2012-04-26 82 views
1

我有一个模板,采用一个char参数,如:常量表达式

A<'T'> 

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

const char ch = str[0]; // str是从字符串我的计划

constexpr char ch = str[0]; //这并不工作无论是对我

我试图做到这一点:

A<ch>(); 

我使用GCC 4.7,并用constexpr涉足,但我还没有能够得到的工作

的方式来得到这个工作,你知道吗? 任何帮助表示赞赏

+0

你想通过字符串指定TYPE吗?如果是这样,那是不允许的。如果您的问题不同,请澄清。例如,“矢量”和“矢量<"int">”之间存在巨大差异。第一个很好。第二不是。 – 2012-04-26 16:33:37

+0

@凯文:'sometemplate <'a'>'和'sometemplate <"a">'之间也有很大的区别。 ; - ]'vector <>'是一个不好的例子,因为它只接受类型,但非类型模板参数对整型类型是合法的。 – ildjarn 2012-04-26 17:22:38

+0

@ildjarn - 我对模板不了解的内容可能会填满一本书(可能也会这样,我需要一本好书),但我知道如果他们试图通过内容指定模板的类型字符串,这样的事情是“不正确的”。 – 2012-04-26 17:47:39

回答

5

这只能工作,如果一切常量表达式:

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

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

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

A<'a'>(); 

由于'a'是一个恒定值,编译时已知的。但这:,

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

也不是,因为value[0]尽管是一个恒定值,在编译期间是不知道。