С++ как передать строку в шаблон?

445
15 февраля 2017, 23:02

Число работает:

template <int age>
class Parent {
};

class Child : public Parent<33> {
};

Но как передать строку?

template <char *text>
class Parent {
};

class Child : public Parent<"ololo"> {
};
Answer 1

Я вам сейчас один фокус покажу, только вы о нем никому не рассказывайте :) Потому как фокус построен чисто на, гм... особенностях 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();
}
Answer 2

Нельзя использовать литеральную строку в шаблонах, так как не понятно, является ли она каждый раз разная, или той же самой. ПО этому придется создать переменную и использовать уже её:

template <const char *text>
class Parent {
};
char text[] = "Ololo";
class Child : public Parent<text> {
};
READ ALSO
C++ конкатенация строк strcat - crash программы [требует правки]

C++ конкатенация строк strcat - crash программы [требует правки]

Почему данный код вызывает падение программы (отличается только наличием %s символа)

515
char* to LPWSTR

char* to LPWSTR

Прошу помочь в приведении типов

440
Анализ кадра с камеры на предмет перевёрнутого изображения

Анализ кадра с камеры на предмет перевёрнутого изображения

Есть клиенты на C++, которые транслируют кадры с веб-камер на HTTP-серверНекоторые камеры отдают перевёрнутые кадры, и нужно программно анализировать...

408
Преобразование типов в С++

Преобразование типов в С++

Определение типов:

388