вернуть универсальную функцию с указанным типом

0

Что делать, если у меня есть общий класс с типом T, и у меня есть функция, которая возвращается с T., и я хочу, чтобы моя функция возвращала определенную строку, если typeid (T) == typedef (string)?

template<class T>
class Class1
{
public:
    Class1();
    ~Class1();
    T func();
};


template <class T>
T Class1<T>::func()
{
    string d = "T = string";
    if (typeid(string) == typeid(T))
        return (T)d; <-- here I got the problem
}
  • 1
    Что ты вообще пытаешься сделать? Как вы используете этот код? В чем «проблема» / ошибка?
  • 2
    Явная специализация.
Показать ещё 4 комментария
Теги:
class
generics
templates

1 ответ

6
Лучший ответ

Здесь приведен пример явной специализации функции-члена шаблона класса:

#include <iostream>
#include <string>

template<class T>
class Class1
{
public:
    Class1() {}
    ~Class1() {}
    T func();
};


template <class T>
T Class1<T>::func()
{
    std::cout << "non-specialized version\n";
    return T();
}

template<>
std::string Class1<std::string>::func()
{
    std::cout << "string version\n";
    return "woot";
}

int main()
{
    Class1<int>().func();
    Class1<std::string>().func();
}
  • 0
    Спасибо чувак. Это именно то, что мне было нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню