Создание специализации шаблона функции-члена в переполнении стека

Я пишу класс, в котором я хочу создать специализацию шаблона функции-члена, как это

namespace aha
{
class Foo
{
public:
template < typename T >
T To() const
{
// some code here
}
};
template <>
bool Foo::To < bool > () const
{
// some other code here
}
}

GCC выдает ошибку:

Явная реализация ‘To < bool> ‘после создания

Я хотел бы сделать это с помощью шаблонной специализации функций-членов только для того, чтобы пользователи моей библиотеки получали ту же функцию при конвертации. Foo для разных типов данных, таких как

Foo obj;
bool b( obj.To < std::string > () );
int i( obj.To < int > () );
float f( obj.To < float > () );

и так далее.

Пожалуйста, дайте мне знать, что я делаю неправильно в коде.

4

Решение

Явная реализация ‘To < bool> ‘после создания

Вышесказанное говорит само за себя: оно становится специализированным после того, как его общая версия уже используется.

Специализация шаблона функции может быть смоделирована с перегрузкой, которая является более гибким механизмом (например, нет частичной специализации для шаблонов функций, но можно достичь желаемого эффекта с перегрузкой):

template<class T> struct Type {}; // similar to boost::type<>

class Foo
{
template<class T>
T doTo(Type<T>) const; // the generic version

bool doTo(Type<bool>) const; // an overload for bool only
// add more overloads as you please

public:
template < typename T >
T To() const {
return this->doTo(Type<T>());
}
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector