частичная специализация шаблонов функций

В приведенном ниже фрагменте кода,

template<typename T1>
void func(T1& t)
{
    cout << "all" << endl;
}

template<typename T2>
void func(T2 &t)
{
    cout << "float" << endl;
}

// I do not want this
// template<> void func(float &t)

int main()
{
    int i; float f;
    func(i); // should print "all"
    func(f); // should print "float" 
    return 0;
}

я хотел бы изменить шаблоны, которые при передаче любого типа, кроме float, будут печатать "все", а передача float будет печатать " плавать ". Мне не нужна специализация шаблона, вместо этого я имею частичную специализацию, которая будет действовать соответственно в зависимости от типа ввода. Как мне это сделать. Заранее спасибо.

Что ж, сценарий, с которым я сейчас столкнулся, похож на Мне нужно определить следующее:

template<typename T1>
void func(T1 &t)
{
    cout << "t1" << endl;
}

template<typename T2>
void func(T2 &t)
{
    cout << "t2" << endl;
}

Следующие вызовы должны вывести "t2"

func(int) // print "t2"
func(float) // print "t2"
func(string) // print "t2"

Следующие вызовы должны вывести "t1"

func(char) // print "t1"
func(xyz) // print "t1"
...
func(abc) // print "t1"

некую группировку, подобную приведенной выше, где немногие должны вызывать реализацию частичной специализации и другие должен вызывать реализацию по умолчанию.

8
задан josh 16 February 2011 в 13:28
поделиться