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*, но и это не помогло.

★★★★★

Re: C++, шаблон

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

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

guest-3484-2009 ()

Re: C++, шаблон

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

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

Deleted ()
Ответ на: Re: C++, шаблон от guest-3484-2009

Re: C++, шаблон

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

staseg ★★★★★ ()
Ответ на: Re: C++, шаблон от guest-3484-2009

Re: C++, шаблон

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

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

staseg ★★★★★ ()
Ответ на: Re: C++, шаблон от Deleted

Re: C++, шаблон

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

LOL, LOL, LOL

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

char str[] = "lala";

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

lester ★★★★ ()
Ответ на: Re: C++, шаблон от lester

Re: C++, шаблон

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

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

staseg ★★★★★ ()
Ответ на: Re: C++, шаблон от staseg

Re: C++, шаблон

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

dilmah ★★★★★ ()
Ответ на: Re: C++, шаблон от staseg

Re: C++, шаблон

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

acefsm ()
Ответ на: Re: C++, шаблон от acefsm

Re: C++, шаблон

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

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