Число работает:
template <int age>
class Parent {
};
class Child : public Parent<33> {
};
Но как передать строку?
template <char *text>
class Parent {
};
class Child : public Parent<"ololo"> {
};
Я вам сейчас один фокус покажу, только вы о нем никому не рассказывайте :) Потому как фокус построен чисто на, гм... особенностях Visual C++.
В нем для строки (даже глобальной) просто ее передача - не сработает:
template<const char* const text>
class Test
{
public:
void out() { cout << text << endl; }
};
const char * const text = "abcd";
int main(int argc, const char * argv[])
{
Test<text> t;
t.out();
}
Но если провернуть вот так, как показано ниже - то Visual C++ 2015 проглотит, не поморщившись:
template<char* text>
class Test
{
public:
void out() { cout << text << endl; }
};
char * text = "abcd";
char& i = text[0];
int main(int argc, const char * argv[])
{
Test<&i> t;
t.out();
}
Нельзя использовать литеральную строку в шаблонах, так как не понятно, является ли она каждый раз разная, или той же самой. ПО этому придется создать переменную и использовать уже её:
template <const char *text>
class Parent {
};
char text[] = "Ololo";
class Child : public Parent<text> {
};
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему данный код вызывает падение программы (отличается только наличием %s символа)
Есть клиенты на C++, которые транслируют кадры с веб-камер на HTTP-серверНекоторые камеры отдают перевёрнутые кадры, и нужно программно анализировать...