我有一个不是模板但具有模板功能的类,如下所示:
class Table {
public:
template <typename t>
t Get(int, int);
};
我想专门针对一个模板类型说明一个像这样定义的fixed_string:
template <int max>
class fixed_string {
};
我该怎么做?
答案 0 :(得分:2)
正如@ForEveR指出的那样,没有专家功能模板专业化,你只能为它提供一个完整的专业化版本。如:
template <>
fixed_string<9> Table::Get<fixed_string<9>>(int, int);
然后通过
调用它table.Get<fixed_string<9>>(0, 0);
但是你可以重载功能模板,例如:
class Table {
public:
template <typename t>
t Get(int, int);
template <int max>
fixed_string<max> Get(int, int);
};
然后
Table table;
table.Get<9>(0, 0);
或
class Table {
public:
template <typename t>
t Get(int, int);
template <int max, template<int> class T=fixed_string>
T<max> Get(int, int);
};
然后
Table table;
table.Get<9>(0, 0); // or table.Get<9, fixed_string>(0, 0);
答案 1 :(得分:0)
如果我理解你的问题,请这样:
Table table;
table.Get<fixed_string<100>>(3,4);
答案 2 :(得分:0)
没有部分功能模板专业化,因此,您只能将其专门用于已知最大的fixed_string。
template<>
fixed_string<100> Table::get(int, int)
{
}
答案 3 :(得分:0)
定义:
template<int max>
fixed_string<max> Get(int, int);
呼叫:
Table obj;
fixed_string<20> str = obj.Get<20>(1, 2);