2014-01-18 3 views
3

Допустим, у меня есть шаблон:«символ сопз * ул» в качестве аргумента шаблона

template<char const *str> 
class Template { ... }; 

Почему это не представляется возможным написать следующее?

Template<"literal"> T; 

или

char const *s = "Literal"; 
Template<s> T; 

И почему следующие работы?

char const s[] = "Literal"; 
Template<s> T; 
+2

потому что стандарт говорит так. – yngccc

+3

@yngum, пока это правда на определенном уровне, это не очень полезно в качестве ответа. – tenfour

+0

@tenfour См. [Передача const char * в качестве аргумента шаблона] (http://stackoverflow.com/a/3854954/1508519). Существует довольно хорошее объяснение причин, почему это не позволяет, но это сводится к спекуляции, не так ли? –

ответ

0

Поскольку классы шаблонов основаны на типах, а не на значениях.
шаблоны предназначены для того, чтобы помочь вам написать более общий код, который является одним и тем же для нескольких типов данных, поэтому вам не придется писать его для каждого типа заново.

+0

Шаблоны могут иметь параметры типа и не-типа. Например, 'template struct foo {double arr [N]; }; foo <3> my_foo; 'отлично. – dyp

Смежные вопросы