相关疑难解决方法(0)

C++函数模板部分特化?

我知道下面的代码是类的部分特化:

template <typename T1, typename T2> 
class MyClass { 
  … 
}; 


// partial specialization: both template parameters have same type 
template <typename T> 
class MyClass<T,T> { 
  … 
}; 
Run Code Online (Sandbox Code Playgroud)

另外我知道C++不允许函数模板部分特化(只允许完整).但是我的代码是否意味着我对一个/同一类型的参数有部分专业的函数模板?因为它适用于Microsoft Visual Studio 2010 Express!如果不是,那么请您解释部分专业化概念吗?

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

template <typename T1, typename T2> 
inline T1 max (T1 const& a, T2 const& b) 
{ 
    return a < b ? b : a; 
} 

template <typename T> 
inline T const& max (T const& a, T const& b)
{
    return …
Run Code Online (Sandbox Code Playgroud)

c++ templates partial-specialization template-specialization

72
推荐指数
5
解决办法
8万
查看次数

模板类不完全专业化

我遇到了一个有趣的观点,我无法解释或找到解释.考虑以下模板定义(使用mingw g ++ 4.6.2编译):

template <typename T, typename S>
class Foo
{
public:
    void f(){}
    void g(){}
};
Run Code Online (Sandbox Code Playgroud)

如果我们想要,我们可以完全专注于任何单一成员函数:

template <>
void Foo<char,int>::f() {}
Run Code Online (Sandbox Code Playgroud)

但部分特化失败,"无效使用不完整类型'类Foo <...>'"错误:

template <typename T, typename S>
void Foo<T,S*>::f()
{
}

template <typename T>
void Foo<T,int>::f()
{
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚原因.这是一个有意识的设计决策,以避免一些我无法预见的问题?这是疏忽吗?

提前致谢.

c++ template-specialization

8
推荐指数
2
解决办法
1378
查看次数