LINUX.ORG.RU

class partial template method spec.

 


1

2
#include <cstdio>

class SomeClass
{
	public:
		template <typename T>
		void do_something();
};

template <typename T>
void SomeClass::do_something()
{
	puts("else");
}

int main()
{
	SomeClass i;
	i.do_something<int>();
}

Я хочу переопределить do_something() таким образом, что бы для

i.do_something <int> ()
выводило «int», а для всех остальных типов: «else». Как это сделать и возможно ли это?

Искал в гугле, но нашёл только default parameters for methods. Но это несколько не то.

Спасибо.

п.с. Вопрос имеет чисто теоретическое значение. Это не есть рашаемая на практике задача.

ЕМНИП, низя. Частичная специализация — только для шаблонов классов. Вот через них и делай.

const86 ★★★★★ ()
#include <cstdio>

class SomeClass {
public:

	template <typename T> void do_something ();
}; // SomeClass

template <> void SomeClass::do_something<int> ()
{
	std::puts("int");
}

template <typename T> void SomeClass::do_something ()
{
	std::puts("else");
}

int main (int argc, char* argv[])
{
	SomeClass i;
	i.do_something<int>();
	i.do_something<unsigned>();
}
tff ()
Ответ на: комментарий от tff

не совсем по теме, но еще есть type_traits


class SomeClass {
public:

    template<class T>
    void do_something()
    {
        if (is_same<T, int>::value)
        {
            puts("int");
        }
        else
        {
            puts("else");
        }
    }
};

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