本文介绍了功能专业与模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我需要使用模板类专门化我的函数,并且有非法使用显式模板参数的问题。

I need to make a specialization of my function with template class and have problem with "illegal use of explicit template arguments".

template <typename T>
class MyClass { /* ... */ }; // it can be any template class, eg std::vector

template <typename T>
void foo() { /* ... */ } // my template function which need a specialization

template<>
void foo<int>() /* sth special for integers - it works */ }

template<template T>
void foo<MyClass<T> >() /* sth special for template class with any parameter - it doesnt work :( */ }

当然,我可以为我需要的所有MyClass类型键入一些专门化,但也许可以替换为一个?

Of course i can type a few specialization for all MyClass'es which i need to, but maybe it can be replaced with one?

推荐答案

函数的模板特化不像专用化 struct 一样灵活:只允许完全专业化如果你想做部分特化,你需要将你的 foo 结构中的函数:

Template specialization of function is not as flexible as specialization of struct: only full specialization is allowed. If you want to do partial specialization you need to wrap your foo function inside a struct:

template <typename T> class MyClass { };

template <typename T> struct Foo;

template <typename T> struct Foo { void foo() {}};

template<> struct Foo<int> { void foo() { } };

template<typename T> struct Foo< MyClass<T> > { void foo() {} };

p>

And then instead of calling

foo<MyClass<...>>()

您呼叫

Foo< MyClass<...> >::foo()

这篇关于功能专业与模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 10:00