我想知道,如果其中一个模板参数属于某种类型,是否有可能部分地特化模板化方法行为。
template<class T>
void Foo(T& parameter)
{
/* some generic - all types - stuff */
If(T is int) // this is pseudo-code, typeinfo? Boost?
{
/* some specific int processing which might not compile with other types */
}
/* again some common stuff */
}
欢迎任何建议。 感谢
答案 0 :(得分:3)
如果你只想专门化一部分函数,那么你只需要用专门的实现来分解函数的一部分:
template<class T>
void Bar(T &t) {}
void Bar(int &i) {
/* some specific int processing which might not compile with other types */
}
template<class T>
void Foo(T &t) {
/* some generic - all types - stuff */
Bar(t);
/* again some common stuff */
}
答案 1 :(得分:2)
不确定
// helper funciton
template <class T>
void my_helper_function(T& v)
{
// nothing specific
}
void my_helper_function(int& v)
{
// int-specific operations
}
// generic version
template <class T>
void Foo(T& v)
{
/* some generic - all types - stuff */
my_helper_function(v);
/* again some common stuff */
}
答案 2 :(得分:0)
是的,您可以提供模板功能的特化(而不是部分特化)。对于成员函数,您需要在包含模板的类之后在命名空间级别定义特化。
如果你的意思是只有部分函数应该是专用的,你不能直接这样做,但是你可以创建另一个模板化函数来实现逻辑的这一部分,将其专门化并从模板中调用它。编译器将使用Foo
模板的单个版本以及FooImplDetail
函数的相应版本。