是否可以创建两个具有相同名称的模板类,只有模板参数的数量不同?例如,
template<typename T>
struct Tuple {
T Item;
};
template<typename T1, typename T2>
struct Tuple {
T1 Item1;
T2 Item2;
};
答案 0 :(得分:2)
不是您使用的语法,但有其他解决方案:
(C ++ 03)
template <typename T1, typename T2 = void>
struct Tuple
{
T1 Item1;
T2 Item2;
};
template <typename T1>
struct Tuple<T1, void>
{
T1 Item;
};
(C ++ 11)
template <typename...>
struct Tuple;
template <typename T1>
struct Tuple<T1>
{
T1 Item;
};
template <typename T1, typename T2>
struct Tuple<T1, T2>
{
T1 Item1;
T2 Item2;
};
答案 1 :(得分:1)
不,你不能。您正在寻找的是class templates overloading
之类的东西。根据{{1}}:
在C ++中,有类模板和函数模板。这两个 各种模板不会以完全相同的方式工作 重载明显不同:普通的旧C ++课程没有 超载,所以类模板也不会过载。另一方面, 具有相同名称的普通旧C ++函数做过载,所以函数 模板也允许重载。这很自然。
基本上,您可以通过Exceptional C++ Style Chapter 7
实现功能。如:
partially specialization
然后
template<typename T1, typename T2 = T1>
struct Tuple {
T1 Item1;
T2 Item2;
};
template<typename T>
struct Tuple<T, T> {
T Item;
};
答案 2 :(得分:1)
至少,不可能这样。
但你应该考虑可变参数模板......
这是一个基本的元组示例(被盗形式http://eli.thegreenplace.net/2014/variadic-templates-in-c/):
template <class... Ts> struct tuple {};
template <class T, class... Ts>
struct tuple<T, Ts...> : tuple<Ts...> {
tuple(T t, Ts... ts) : tuple<Ts...>(ts...), tail(t) {}
T tail;
};