Mar*_*rkP 5 c++ templates template-specialization
说我有这个:
template<typename T, int X>
class foo
{
public:
void set(const T &t);
};
template<typename T, int X>
void foo::set<T, X>(const T &t)
{
int s = X;
// ...etc
}
Run Code Online (Sandbox Code Playgroud)
我可以将函数类型'T'专门化,但是将'X'作为模板参数吗?
class bar;
template<int X>
void foo::set<bar, X>(const bar &t)
{
int s = X;
// ...etc
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
一旦掌握了它,这就非常容易了
template<typename T, int X>
class foo
{
private:
template<typename, int> class params { };
public:
void set(const T &t) {
set(t, params<T, X>());
}
private:
template<typename T1, int X1>
void set(const T1 &t, params<T1, X1>) {
// ...
}
template<int X1>
void set(const bar &t, params<bar, X1>) {
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为如果您明确地专门化单个成员,则必须提供所有模板参数.你不能留下一些.