LINUX.ORG.RU

C++, шаблон


0

0

Здравствуйте.
Не получается передать строку в качестве параметра шаблона функции.

template<int a>
void print(){
printf("%d\n",a);
}

template<const char *a>
void print_str(){
printf("%s\n",a);
}

int main(int argc,char **argv){
print<15>();
print_str<"lala">();//shit
return 0;
}

Функция print работает, а print_str не компилируется:
error: ‘"lala"’ is not a valid template argument for type ‘const char*’ because string literals can never be used in this context

Пробовал использовать QString вместо const char*, но и это не помогло.

★★★★★

И главное - с какой целью учишь C++?
Если "для себя" - плохую выбрал цель. Не слушай дураков, которые говорят, что C++ сейчас имеет смысл.

Если по программе курса в вузе - глубоко сочувствую.

guest-3484-2009
()

> error: ‘"lala"’ is not a valid template argument for type ‘const char*’ because string literals can never be used in this context

Что не ясно? Строки нельзя использовать в качестве аргументов шаблона.

Deleted
()
Ответ на: комментарий от guest-3484-2009

Этот код - пример, демонстрирующий мою криворукость. Задача: передать строку в качестве параметра шаблона.

staseg ★★★★★
() автор топика
Ответ на: комментарий от guest-3484-2009

2guest-3484-2009: я работаю, пишу на с++, он имеет сейчас смысл. И в жопу холивор.

2mironov_ivan: благодарю.

staseg ★★★★★
() автор топика
Ответ на: комментарий от Deleted

> Что не ясно? Строки нельзя использовать в качестве аргументов шаблона.

LOL, LOL, LOL

Топикстартер, вот тебе решение( и таки RTFM! )

char str[] = "lala";

int main(int argc,char **argv){
print<15>();
print_str<str>();//shit
return 0;
}

lester ★★★★
()
Ответ на: комментарий от lester

Огромное спасибо за решение, lester. Остается лишь непонятным, почему нельзя эту же строку указывать прямо при "раскрытии" шаблона. Но это наверное действительно RTFM, найду время погуглю.

Еще раз спасибо.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

одинаковые строковые литералы не обязаны иметь одинаковый адрес

dilmah ★★★★★
()
Ответ на: комментарий от staseg

В С++ нельзя передавать строки в аргументах шаблона
Можно только С строки у которых внешняя компоновка (external linkage)

acefsm
()
Ответ на: комментарий от acefsm

Спасибо за книгу. Прочитаю.

staseg ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.